2010-08-02 117 views
2

我有一个后台工作线程,包含一个循环。对于每次迭代,我想更新一个文本框,向用户显示发生了什么事情的日志。例如,如果用户再杀200个网站的头条它会说:ReportProgress C#问题

刮site1.net 刮site2.net 刮site3.net

我能看到的唯一的事情,这是否是reportProgress,其中只有一个整数除外。我无法报告百分比。我希望每次迭代都能触发一个事件。

这可能吗?

回答

1

DoWorkEventArgs类有一个“object”类型的属性“Argument”,它可以用来将任何想要的东西传递给后台工作者。

您可以在视图模型或其他绑定源上定义线程安全的字符串属性,然后将其作为参数传递;那么BackgroundWorker可以更新它,并且如果您使用的是WPF或Silverlight,则可以通过绑定或通过WPF分派器更新您的UI。

+0

啊,不,我没有使用任何。我正在使用桌面应用程序。 – 2010-08-02 01:44:00

3

改为使用第二次重载。将percentProgress设置为0,并将网站的userState设置为您的字符串或字符串[]。

myBackgroundWorker.ReportProgress(int percentProgress, object userState); 

例子:

private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     // Set your sites dynamically here. 

     string[] sites = new string[] 
     { 
      "Test.com", 
      "Example.net", 
      "Google.com" 
     }; 

     myBackgroundWorker.ReportProgress(0, sites); 
    } 

    private void myBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     string[] sites = (string[])e.UserState; 

     // Enjoy your string array. 
    }