C#跨线程调用更新进度条

时间:2011-11-19 22:41:07

标签: c# winforms multithreading

我有一个winform,它读取第二个线程上的csv文件,将文件数据写入控制台。主窗体有一个进度条。我希望根据第二个线程中读取的数据行更新主窗体上的进度条。在我的第二个线程函数中,我使用:

pBar.BeginInvoke((MethodInvoker)delegate
{
    this.pBar.Value = (int) (((double) nRows) / ((double) fileLines));
});

毋庸置疑,这似乎不起作用。任何建议都将不胜感激。

顺便说一句,我应该在第二个帖子中使用pBar.Show()和pBar.Hide()或设置pBar.Visible来显示/隐藏进度条吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可能只是将乘法乘以100而转换为百分比:

this.pBar.Value = 100*nRows/fileLines;

假设nRows取值0fileLines之间的值,那么您的代码将始终将进度条值设置为01


  

我应该在第二个帖子中使用pBar.Show()pBar.Hide()还是设置pBar.Visible来显示/隐藏进度条?

无论你在第二个线程中做什么,都不应该调用GUI控件的方法。使用BeginInvokeInvoke封送到GUI线程。