0

我试图让它在我单击按钮时刷新我的表单。但是我不断收到错误

'跨线程操作无效:控件'Form1'从创建它的线程以外的线程访问。

 private void button1_Click(object sender, EventArgs e)
    {
        worker.DoWork += formReload;
        worker.RunWorkerAsync();
    }

    static BackgroundWorker worker = new BackgroundWorker();

    private void formReload(object sender, DoWorkEventArgs ev)
    {
        this.Refresh();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {

    }

我试图研究它,我知道我必须使用 Invoke 方法,但是我不明白把它放在哪里,为什么要使用它?任何帮助将非常感激!

谢谢,贾罗德

4

1 回答 1

4

实际上你的代码什么都不做,这DoWork是不必要的。您可以将代码重写为:

private void button1_Click(object sender, EventArgs e)
{
    worker.RunWorkerAsync();
}

static BackgroundWorker worker = new BackgroundWorker();

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    if (this.InvokeRequired)
        this.Invoke(new Action(()=>Refresh()));
}

假设您使用以下方式订阅了构造函数中的DoWork方法

worker.DoWork += backgroundWorker1_DoWork;

请注意, aRefresh不会改变任何东西。你有什么要刷新的?

于 2013-07-09T13:27:06.717 回答