我有一個項目,我需要從另一個類的方法內更新標籤文本。值得注意的是這個方法是從後臺工作線程調用的。Winforms:從另一個類更新窗體上的標籤
我試過在文本中傳遞更新爲User ReportProgress()中的UserState Obj;方法,然後在主窗體上觸發工人進度更改事件時更新標籤。這可以起作用,但顯然只有在引發進度更改事件時纔會更新標籤文本。
我有加載/刪除代理不斷的代碼,我需要一個標籤來顯示它,因爲它發生(而不是隻有當bg工人進展改變事件觸發時更新)。希望有人能幫助。
感謝
編輯*下面是一些代碼,以使問題變得更容易理解: -
public string Request(string action)
{
if (string.IsNullOrWhiteSpace(action))
{
return "";
}
HttpWebRequest req;
string response = string.Empty;
while (response.Equals(string.Empty) && proxy != null)
{
try
{
req = (HttpWebRequest)WebRequest.Create(action);
req.Proxy = proxy;
response = new StreamReader(req.GetResponse().GetResponseStream()).ReadToEnd();
}
catch (Exception ex)
{
RemoveProxy(proxy);
MessageBox.Show("Proxy Removed: " + proxy.Address.ToString());
proxy = GenNewProx();
MessageBox.Show("New proxy" + proxy.Address.ToString());
}
}
return response;
}
^^^ - 我需要設置標籤的文本,使用Msgboxs此刻但更新主表單上的標籤顯然是可取的
foreach (string url in URLs)
{
result.URL = url;
result.Shares = grabber.GetFacebookShares(url);
result.Tweets = grabber.GetTweetCount(url);
result.PlusOnes = grabber.GetPlusOnes(url);
bgWorker.ReportProgress((outputGridView.Rows.Count * 100)/importGridView.Rows.Count, result);
}
^^^ - bg工人在主窗體中執行do_work方法。
第二編輯*
我是一個有點新的事件,但是我能不火過一個自定義事件說Proxy_Changed每次我切換proxys而在字符串參數傳遞與新的代理/味精,我們再訂閱在主窗體中將此事件添加到此事件中,然後在主窗體上設置標籤text =當此事件觸發時的字符串參數?雖然我可能說的是亂碼tbh:/
這工作,但該標籤只更新當工人報告了一些進展,除非我誤解你的實現?我使用的是財產的其他類並將其設置爲我想要顯示的標籤上的表格上的字符串,然後通過這個在例如爲: myLabel.Text = gp.Status; – dtsg 2012-03-21 13:18:07
我更新了示例,請嘗試 – asktomsk 2012-03-21 13:57:11
這看起來像調用ProgressChanged的更復雜的方式。爲什麼這種方式會更好? – 2012-03-21 14:10:02