在我的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
函数中的情况下(。您可以使用BackgroundWorker
的ProgressChangedEventHandler
在其回调中修改UI状态。