将标签传递给不更新label.text的方法?

时间:2018-11-11 22:31:18

标签: c# winforms

我在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 :(得分:0)

如果您尝试在BackgroundWorker中更改标签文本,则需要引入ProgressChangedRunWorkerCompleted事件处理程序

因此,即使BackgroundWorker在不同的线程上执行,这两个事件处理程序也将在主线程上执行,并且可以正确访问表单控件。