c# – 为什么Crossthreading这样工作?
发布时间:2020-12-15 06:56:09 所属栏目:百科 来源:网络整理
导读:解决了 似乎奥利弗是对的.经过几次尝试,我得到了异常,在调试模式我得到它肯定.所以这一切都要关于时间安排.你也应该检查Matthew wattsons的答案;) 例 首先要说明一点我的困惑. using System;using System.Collections.Generic;using System.ComponentModel;u
解决了
似乎奥利弗是对的.经过几次尝试,我得到了异常,在调试模式我得到它肯定.所以这一切都要关于时间安排.你也应该检查Matthew wattsons的答案;) 例 首先要说明一点我的困惑. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace testCrossThreading { public partial class Form1 : Form { public Form1() { InitializeComponent(); new Thread(ThreadJob).Start(); } void ThreadJob() { //label1.Text = "1"; changeText(label1,"1"); } void changeText(Label L,String message) { L.Text = message; } } } 题 所以现在我的问题:如果我取消注释label1.Text =“1”;在函数“ThreadJob”中,我按预期得到一个十字线程异常. 我会这样写 void ThreadJob() { Action a = () => label1.Text = "1"; this.Invoke(a); } 解决方法
我认为这只是一个时间问题.如果您尝试从非gui线程更新gui元素,则可以抛出跨线程异常.甚至可以通过调用来禁止整个跨线程的异常
Form.CheckForIllegalCrossThreadCalls = false; 但是在异常消失之后,进一步的行为是未定义的,可能导致非常微妙的错误.所以将异常作为一个代码气味的提示,但要注意的是,有时异常不会被抛出,即使它应该是. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |