У меня есть проект, в котором мне нужно обновить текст метки из другого метода классов. Стоит отметить, что этот метод вызывается из фонового рабочего потока.
Я попытался передать текст для обновления в качестве объекта UserState в Workers ReportProgress (); метод, а затем обновить метку, когда в основной форме запускается событие изменения рабочих. Это работает, но, очевидно, обновляет текст меток только при возникновении события изменения прогресса.
У меня есть код, который постоянно загружает / удаляет прокси-серверы, и мне нужна метка, чтобы показать, как это происходит (в отличие от обновления, только когда bg worker прогрессирует, изменяя события). Надеюсь, кто-то может помочь.
Спасибо
Редактировать * Вот код, который немного облегчает понимание проблемы: -
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;
}
^^^ - Там, где мне нужно установить текст меток, используя Msgbox на данный момент, но обновление метки в главной форме, очевидно, предпочтительнее
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 в главной форме.
2-е редактирование *
Я немного новичок в событиях, но могу ли я не запускать пользовательское событие, скажем, Proxy_Changed каждый раз, когда я переключаю прокси и передаю строковый аргумент с новым proxy / msg мы, а затем подписываемся на это событие в основной форме затем установите метку на главной форме text = строка args, когда сработает это событие? Я, вероятно, говорю о чепухе, хотя: /