跨线程操作无效好的,我知道为什么这会给我这个错误:跨线程操作无效:控制从其创建的线程以外的线程访问的“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时会更容易。
2 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
你不能。必须在拥有的线程上执行UI操作。期。
你可以做的是在子线程上创建所有这些项目,然后调用Control.Invoke
并在那里进行数据绑定。
或者使用 BackgroundWorker
BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += (s, e) => { /* create items */ }; bw.RunWorkerCompleted += (s, e) => { /* databind UI element*/ }; bw.RunWorkerAsync();
RISEBY
TA贡献1856条经验 获得超5个赞
从另一个线程访问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 }}
- 2 回答
- 0 关注
- 440 浏览
添加回答
举报
0/150
提交
取消