我有一個後臺工作線程,包含一個循環。對於每次迭代,我想更新一個文本框,向用戶顯示發生了什麼事情的日誌。例如,如果用戶再殺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