gpt4 book ai didi

c# - 来自 C# 中另一个线程的事件

转载 作者:太空宇宙 更新时间:2023-11-03 20:35:28 25 4
gpt4 key购买 nike

我有这样的代码:http://pastie.org/1638879

我从别人的博客上得到的。它必须对大文件进行排序。我在单独的线程中执行它:

    protected virtual void goButton_Clicked (object sender, System.EventArgs e)
{
FileSort fileSort = new FileSort(fileNameEntry.Text, "./BigFileSorted.dat");
fileSort.SplitProgressChanged += fileSortProgressSplitting;
fileSort.SortChunksProgressChanged += fileSortProgressSorting;
fileSort.MergeProgressChanged += fileSortProgressMerging;

Thread thread = new Thread(fileSort.Sort);
thread.Start();
//fileSort.Sort();
}

protected virtual void fileSortProgressSplitting(FileSort o, double progress)
{
progressBar.Fraction = progress;
progressBar.Text = "Splitting...";
}

protected virtual void fileSortProgressSorting(FileSort o, double progress)
{
progressBar.Fraction = progress;
progressBar.Text = "Sorting...";
}

protected virtual void fileSortProgressMerging(FileSort o, double progress)
{
progressBar.Fraction = progress;
progressBar.Text = "Merging...";

}

对于小文件,一切正常,但对于大文件(大约 4 gb),progressBar 在拆分步骤中由于某种原因停止在某个值上。但是 split 完成了。这种奇怪的原因是什么?附言我正在用 Mono 和 Gtk# 编写它。

最佳答案

与winforms一样,Gtk具有线程亲和性。您的更新应该发生在主 UI 循环中。您可以通过以下方式执行此操作:

protected virtual void fileSortProgressMerging(FileSort o, double progress) {
Gtk.Application.Invoke (delegate {
progressBar.Fraction = progress;
progressBar.Text = "Merging...";
});
}

另见 mono Best Practices对此的注释。

关于c# - 来自 C# 中另一个线程的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com