BackgroundWorker-表单刷新

本文关键字:刷新 表单 BackgroundWorker- | 更新日期: 2023-09-27 18:21:35

我正试图让它在单击按钮时刷新我的表单。然而,我不断得到一个错误

'跨线程操作无效:从线程,而不是在其上创建的线程。'

 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方法,但我不明白该把它放在哪里,为什么要使用它?任何帮助都将不胜感激!

谢谢,Jarrod

BackgroundWorker-表单刷新

实际上您的代码什么都不做,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;

请注意,Refresh不会改变任何内容。你有什么需要刷新的?