非UI线程访问UI线程里的控件但不更新它需要invoke吗 string str=label1.Text;label1.Text="1";你分别在线程里执行这两句话,看哪个报错误不就得了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 简单的情况很可能看不出问题,不过winform无法保证取值是没有副作用的,所以理论上应该invoke才能确保正确。 访问的话,应该可以不用Invoke自己试下就知道了~ 试了下还真不需要,甚至set时如果没有实际改变也不需要。。但靠这么分辨,写起代码来太麻烦了,还不如无脑invoke呢= = // 把跨线程调用检查设置为false// base.invoke 倒是可以不要,不过确实一个保险操作Control.CheckForIllegalCrossThreadCalls = false; 这只是不检查了,不代表不会出现异常好比代码里标记为unsafe,就可以用指针了一样,不代表这样用指针就不会溢出 几乎每个人都知道跨线程访问时,需要调用控件(或Form)的Invoke方法,其用途是将操作排入UI线程来执行;但又有多少人知道为什么要让UI线程来执行呢?你也可以设置CheckForIllegalCrossThreadCalls = false,不检查也不会抛出异常,但这是自欺欺人的做法,就和掩耳盗铃似的。你可以想象,同时有100个线程对同一个lable赋值,你能确定lable最终的值吗,你能保证线程都互不干扰不死锁吗?你能保证程序不会崩溃吗?Invoke就是解决此类问题的,其目的只有一个不管你有多少个赋值操作请排队。 既然是访问UI线程上的控件,最好还是使用Invoke或者beginInvoke教给UI线程来进行 取决于这个控件的这个属性的实现,Text是属性,也就是一个get_Text()方法假如它就是简单的return this._text;这当然没问题,跟其他的类一样但是你无法确定某个控件,尤其是第三方自定义控件的get逻辑,假如它里面还有访问或者更新其他的东西,那么肯定就出问题了同意LS的说法,更新界面和业务处理分开,处理完了把结果返回去,再更新界面 debug 在线修改的问题 C#/winform程序打包部署 如何把SQL 数据库 一起打包进 C#代码实现声音播放 .net一般用什么cms 点窗口右上角'X'按钮无法关闭窗口 关于接口的问题,有什么用? sql 少了ssis 哪有下载啊 求关于Asp.net的问题,希望可以尽快回答啊. 简单问题,关于数据库打包问题! 刚学C#,问个比较菜的问题 Discuz Nt3.1 后台admin登录不进去 关于移位的一点疑问
// base.invoke 倒是可以不要,不过确实一个保险操作
Control.CheckForIllegalCrossThreadCalls = false;
好比代码里标记为unsafe,就可以用指针了一样,不代表这样用指针就不会溢出
几乎每个人都知道跨线程访问时,需要调用控件(或Form)的Invoke方法,其用途是将操作排入UI线程来执行;但又有多少人知道为什么要让UI线程来执行呢?你也可以设置CheckForIllegalCrossThreadCalls = false,不检查也不会抛出异常,但这是自欺欺人的做法,就和掩耳盗铃似的。你可以想象,同时有100个线程对同一个lable赋值,你能确定lable最终的值吗,你能保证线程都互不干扰不死锁吗?你能保证程序不会崩溃吗?Invoke就是解决此类问题的,其目的只有一个不管你有多少个赋值操作请排队。
假如它就是简单的return this._text;这当然没问题,跟其他的类一样但是你无法确定某个控件,尤其是第三方自定义控件的get逻辑,假如它里面还有访问或者更新其他的东西,那么肯定就出问题了
同意LS的说法,更新界面和业务处理分开,处理完了把结果返回去,再更新界面