"Cross thread operation not valid"警告



在我的c#表单应用程序中,我使用背景工人,但无法更改label1字段。谁能帮我吗?

谢谢。

private void goButton_Click(object sender, EventArgs e)    
{
    _worker = new BackgroundWorker();
    _worker.WorkerSupportsCancellation = true;
    _worker.DoWork += new DoWorkEventHandler((state, args) =>
    {
        do
        {
            if (_worker.CancellationPending)
                break;
            setlabel();
        } while (true);
    });
    _worker.RunWorkerAsync();
    goButton.Enabled = false;
    stopButton.Enabled = true;
}
private void setlabel()
{
    label1.Text = "test";
}

您无法操纵从背景线程在UI线程上创建的控件。为此,您可以使用BeginInvoke方法:

  if (_worker.CancellationPending)
        break;
   this.BeginInvoke(new Action(setlabel));

方法:

在"在上面的下面的手柄上"上的线程上执行指定的委托。

您无法从UI线程中更新UI元素(在DoWork函数中的情况下(。您可以使用BackgroundWorkerProgressChangedEventHandler在其回调中修改UI状态。

最新更新