C# BackgroundWorker-表单刷新

C# BackgroundWorker-表单刷新,c#,backgroundworker,invoke,C#,Backgroundworker,Invoke,我正在尝试使其在单击按钮时刷新表单。然而,我不断得到一个错误 '跨线程操作无效:从中访问控件'Form1' 线程,而不是创建它的线程。' 我试着研究它,我知道我必须使用Invoke方法,但是我不知道把它放在哪里,为什么要使用它?任何帮助都将不胜感激 谢谢, Jarrod实际上您的代码什么都不做,DoWork是不必要的。您可以将代码重写为: private void button1_Click(object sender, EventArgs e) { worker.RunWorkerAs

我正在尝试使其在单击按钮时刷新表单。然而,我不断得到一个错误

'跨线程操作无效:从中访问控件'Form1' 线程,而不是创建它的线程。'

我试着研究它,我知道我必须使用Invoke方法,但是我不知道把它放在哪里,为什么要使用它?任何帮助都将不胜感激

谢谢,
Jarrod

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

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

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

请注意,
刷新
不会改变任何内容。你必须刷新什么?

发布一些DoWork代码,你必须将其放入该方法中。可能重复将刷新从
bg\u DoWork
移动到
bg\u Runworker Completed
你可以先在谷歌上搜索错误消息…嗨,谢谢你的快速回复。我没有工作,所以我发布了this.Refresh();在那里,但是现在没有错误,但是它也不工作。我的代码中有一个变量,在形式_load中有一个开关情况,因此如果变量=1,那么执行情况1中的代码。发布一些DoWork代码,您必须将其放入该方法中。移动刷新从
bg\u DoWork
bg\u runworker completed
的可能重复您可以先在谷歌上搜索错误消息…您好,感谢您的快速回复。我没有工作,所以我发布了this.Refresh();在那里,但是现在没有错误,但是它也不工作。我的代码中有一个变量,在形式_load中有一个开关情况,所以如果变量=1,那么执行情况1中的代码。嗨,谢谢!错误不再出现,但表单似乎没有重新加载我编辑了回复,您需要重新加载什么?重新加载表单的代码在哪里?我认为它会刷新所有内容(即使是在表单加载中)。因为我有一个名为refresh的int,所以每次刷新表单时都会添加一个int。然后我的想法是运行一个开关,它获取refresh int并在每种情况下绘制不同的东西?如果这是合理的,那么表单加载只调用一次(当表单第一次实际加载时)。如果您想调用它,您不必使用
Refresh
,而是显式地调用它:使用
this.Invoke(newaction(()=>form_Load(null,null))非常感谢:)抱歉浪费您的时间嗨,谢谢!错误不再出现,但表单似乎没有重新加载我编辑了回复,您需要重新加载什么?重新加载表单的代码在哪里?我认为它会刷新所有内容(即使是在表单加载中)。因为我有一个名为refresh的int,所以每次刷新表单时都会添加一个int。然后我的想法是运行一个开关,它获取refresh int并在每种情况下绘制不同的东西?如果这是合理的,那么表单加载只调用一次(当表单第一次实际加载时)。如果您想调用它,您不必使用
Refresh
,而是显式地调用它:使用
this.Invoke(newaction(()=>form_Load(null,null))非常感谢:)很抱歉浪费您的时间