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