我有一个项目,我需要从另一个类的方法内更新标签文本。值得注意的是这个方法是从后台工作线程调用的。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