我有一个包含循环的后台工作线程。对于每次迭代,我都想更新一个文本框,向用户显示正在进行的日志。例如,如果用户正在废弃200个网站作为头条新闻,那么就会说:
scraped site1.net 刮掉了site2.net Scraped site3.net
我唯一可以看到的是reportProgress,它只排除整数。我没有用来报告这个百分比。我希望每次迭代都能触发一个事件。
这可能吗?
答案 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进行更新。