一尘不染

跨线程操作无效[重复]

c#

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

跨线程操作无效:控件“ 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();

我不在乎线程的时间或完成方式,所以我真的不在乎任何花哨的内容或过于复杂的atm,除非在新线程中使用UI会使事情变得容易得多。


阅读 226

收藏
2020-05-19

共1个答案

一尘不染

你不能 UI操作必须在所属线程上执行。期。

可以 做的是在子线程上创建所有这些项目,然后Control.Invoke在此处调用并进行数据绑定。

或使用 BackgroundWorker

    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += (s, e) => { /* create items */ };
    bw.RunWorkerCompleted += (s, e) => { /* databind UI element*/ };

    bw.RunWorkerAsync();
2020-05-19