ReportProgress C#问题

时间:2010-08-02 01:04:54

标签: c#

我有一个包含循环的后台工作线程。对于每次迭代,我都想更新一个文本框,向用户显示正在进行的日志。例如,如果用户正在废弃200个网站作为头条新闻,那么就会说:

scraped site1.net 刮掉了site2.net Scraped site3.net

我唯一可以看到的是reportProgress,它只排除整数。我没有用来报告这个百分比。我希望每次迭代都能触发一个事件。

这可能吗?

2 个答案:

答案 0 :(得分: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.
    }

答案 1 :(得分:1)

DoWorkEventArgs类具有“对象”类型的属性“Argument”,可用于将任何您想要的内容传递给后台工作程序。

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