我有一个后台工作线程,包含一个循环。对于每次迭代,我想更新一个文本框,向用户显示发生了什么事情的日志。例如,如果用户再杀200个网站的头条它会说:ReportProgress C#问题
刮site1.net 刮site2.net 刮site3.net
我能看到的唯一的事情,这是否是reportProgress,其中只有一个整数除外。我无法报告百分比。我希望每次迭代都能触发一个事件。
这可能吗?
我有一个后台工作线程,包含一个循环。对于每次迭代,我想更新一个文本框,向用户显示发生了什么事情的日志。例如,如果用户再杀200个网站的头条它会说:ReportProgress C#问题
刮site1.net 刮site2.net 刮site3.net
我能看到的唯一的事情,这是否是reportProgress,其中只有一个整数除外。我无法报告百分比。我希望每次迭代都能触发一个事件。
这可能吗?
DoWorkEventArgs类有一个“object”类型的属性“Argument”,它可以用来将任何想要的东西传递给后台工作者。
您可以在视图模型或其他绑定源上定义线程安全的字符串属性,然后将其作为参数传递;那么BackgroundWorker可以更新它,并且如果您使用的是WPF或Silverlight,则可以通过绑定或通过WPF分派器更新您的UI。
改为使用第二次重载。将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.
}
啊,不,我没有使用任何。我正在使用桌面应用程序。 – 2010-08-02 01:44:00