Передача метки методу, который не обновляет label.text? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть метка в winform, и я пытаюсь передать метку с кнопки запуска. Вот мой код:

public void DirectLinkTask1(string DirectLinkText, string status)
{
    {
        Start(status);
        string url = driver.Url;
        LogIn(status);
        while (string.IsNullOrEmpty(DirectLinkText))
        {
            status = "Waiting for direct link input...";
        }
        driver.Url = $"{DirectLinkText}";
        status = "Direct Link opened, adding to cart...";
        try
        {
            AddToCartDirectLink(DirectLinkText, status);
        }
        catch
        {
            status = "Direct Link Error";
        }
    }
}

Код кнопки:

string status1 = labelStatus1.Text;
if (TaskTypeBox.Text.Contains("Keyword"))
{
     worker = new BackgroundWorker();
     worker.DoWork += (obj, ea) => KeywordTask1(txtKWDL1.Text, status1);
     worker.RunWorkerAsync();
}
else if (TaskTypeBox.Text.Contains("DirectLink"))
{
    worker = new BackgroundWorker();
    worker.DoWork += (obj, ea) => DirectLinkTask1(txtKWDL1.Text, status1);
    worker.RunWorkerAsync();
}
else
{
    labelStatus1.Text = "Please select task type";
}

Метка вообще не обновляется, не знаю почему. Я новичок в C #, и я уверен, что это простая ошибка. Это изменится на «Пожалуйста, выберите тип задачи» в операторе else, но это так. Заранее благодарю за помощь. пожалуйста, дайте мне знать, если я могу предоставить что-нибудь еще, чтобы помочь:)

1 Ответ

0 голосов
/ 12 ноября 2018

Если вы пытаетесь изменить текст метки в пределах BackgroundWorker, вам нужно ввести ProgressChanged или RunWorkerCompleted обработчики событий

Таким образом, даже BackgroundWorker, выполняющий в другом потоке эти два обработчика событий, будет выполняться в основном потоке и будет иметь надлежащий доступ к элементам управления формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...