在后台工作线程中访问主线程控制

Raj*_*mar 1 c# multithreading backgroundworker winforms

我有一个ShowPanel(Control ctrl)需要Control作为参数传递的函数。我需要在后台工作线程中调用这个函数。我使用以下代码

void bw_DoWork(object sender,DoWorkEventArgs e)
{                      
    ShowPanel(listBox1);           
}
Run Code Online (Sandbox Code Playgroud)

但因执行而失败

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

我怎样才能listBox1在后台线程中通过这里?

Tal*_*ner 5

序列化调用,因为您无法访问在不同线程上创建的控件,您需要使用下面的序列化调用

 void bw_DoWork(object sender,DoWorkEventArgs e)
 {                      
   this.Invoke(new MethodInvoker(delegate {

              ShowPanel(listBox1);           
    })); 
 }
Run Code Online (Sandbox Code Playgroud)