首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自C#中另一个线程的事件

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

Stack Overflow用户
提问于 2011-03-06 18:15:06
回答 2查看 567关注 0票数 1

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

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

代码语言:javascript
复制
    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会因为某些原因而停止。但是拆分已经完成了。这种奇怪的原因是什么?另外,我正在用Mono和Gtk#写这篇文章。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-06 18:19:31

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

代码语言:javascript
复制
protected virtual void fileSortProgressMerging(FileSort o, double progress) {
    Gtk.Application.Invoke (delegate {
        progressBar.Fraction = progress;
        progressBar.Text = "Merging...";
    });    
}

另请参阅有关这一点的mono Best Practices说明。

票数 3
EN

Stack Overflow用户

发布于 2011-03-06 18:18:23

您不能从非GUI线程接触GUI对象。结果是不可预测的。有时它会抛出异常,但并不总是如此。

相反,使用InvokeBeginInvoke方法(前者更好)。如下所示:

代码语言:javascript
复制
protected virtual void fileSortProgressSplitting(FileSort o, double progress)
{
    BeginInvoke( new Action( () =>
        {
            progressBar.Fraction = progress;
            progressBar.Text = "Splitting...";
        } );
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5209886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档