跨线程操作无效

跨线程操作无效

好的,我知道为什么这会给我这个错误:

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

但是......我怎样才能使这个可行?

System.Threading.Thread t = new System.Threading.Thread(()=>{
   // do really hard work and then...
   listView1.Items.Add(lots of items);
   lots more UI work});t.Start();

我不关心Thread何时或如何完成,所以我并不关心任何花哨或过于复杂的atm,除非在新的Thread中使用UI时会更容易。


至尊宝的传说
浏览 306回答 2
2回答

慕田峪9158850

你不能。必须在拥有的线程上执行UI操作。期。你可以做的是在子线程上创建所有这些项目,然后调用Control.Invoke并在那里进行数据绑定。或者使用 BackgroundWorker    BackgroundWorker bw = new BackgroundWorker();     bw.DoWork += (s, e) => { /* create items */ };     bw.RunWorkerCompleted += (s, e) => { /* databind UI element*/ };     bw.RunWorkerAsync();

RISEBY

从另一个线程访问from的属性时,抛出此异常。要解决此问题,至少有两个选项。告诉控制不要抛出这些异常(不推荐):Control.CheckForIllegalCrossThreadCalls = false;使用线程安全函数:private void ThreadSafeFunction(int intVal, bool boolVal){     if (this.InvokeRequired)     {         this.Invoke(             new MethodInvoker(             delegate() { ThreadSafeFunction(intVal, boolVal); }));     }     else     {         //use intval and boolval     }}
打开App,查看更多内容
随时随地看视频慕课网APP