WinForm中在非UI线程更改控件值的办法

从非UI线程调用UI控件赋值、或进行其他更新UI的操作的话,会出现异常:

System.InvalidOperationException:“线程间操作无效: 从不是创建控件“xxx”的线程访问它。”

解决办法:

原来的

xxx.Text="Test";

换成

xxx.BeginInvoke(new Action(()=>{xxx.Text="Test"}));

使用BeginInvoke解决。

参考:Control的Invoke和BeginInvoke 是相对于支线线程(因为一般在支线线程中调用,用来更新主线程ui)Invoke立即插入主线程中执行,而BeginInvoke 要等主线程结束才执行

c# Invoke和BeginInvoke 区别

时间: 2024-12-15 17:10:56

WinForm中在非UI线程更改控件值的办法的相关文章

C# 非UI线程对控件的控制

第一步:定义委托 public delegate void wei(string ss); 第二步:控制UI的方法 public void get1(string ss) { richTextBox1.Text += ss; } 第三步:定义线程 1 public void RecMessage() 2 { 3 //线程方法 4 控件.BeginInvoke(new wei(控制UI方法), new object[] { 参数 }); 5 } 第四步:启动线程 Thread th = new T

WinForm与WPF下跨线程调用控件

Winform下: public delegate void UpadataTextCallBack(string str,TextBox text); public void UpadtaText(string str, TextBox text) { if (text.InvokeRequired) { UpadataTextCallBack upadataTextCallBack = UpadtaText; text.Invoke(upadataTextCallBack, new obje

为什么我们可以在非UI线程中更新UI

尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究! 炮兵镇楼 看到这样的标题--估计N多人会说我是逗比----因为很多盆友在学习Android(特别是从4.0之后开始入门的)的时候都会常看见或听到别人说我们更新UI呢要在UI线程(或者说主线程)中去更新UI,不要在子线程中更新UI,而Android官方呢也建议我们不要在非UI线程直接更新UI,为什么呢?借助Android官方的一句话来说就是:

Android 非UI线程中更新UI

Android 非UI线程中更新UI runOnUiThread(new Runnable() { public void run() { onDown(null); } });

Android开之在非UI线程中更新UI

当在非UI线程中更新UI(程序界面)时会出现如下图所示的异常: 那如何才能在非UI线程中更细UI呢? 方法有很多种,在这里主要介绍两种: 第一种:在需要更新UI的代码行后加Looper.prepare();与Looper.loop();两句话即可.如: new Thread(){ @Override public void run() { // TODO Auto-generated method stub txtRotation.setText("在非UI线程中更新UI!"); Lo

Android在非UI线程中更新UI的方法

1.使用Thread+Handler实现非UI线程更新UI界面 private MyHandler mHandler = new MyHandler(); ...... mHandler.sendResult(MyHandler.UPDATE_VIEW, null); ...... private class MyHandler extends Handler{ private static final int UPDATE_VIEW = 0; @Override public void han

Android在非UI线程中显示Toast

[java] view plaincopyprint? public void showToast(String msg){ Looper.prepare(); Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); Looper.loop(); } public void showToast(String msg){ Looper.prepare(); Toast.makeText(getApplicat

基础篇-在非UI线程中更新UI元素

个人原创,转载请注明出处: http://blog.csdn.net/supluo/article/details/ 先了解两个概念 1.UI:User Interface的缩写,用户界面的意思.你可以不恰当的理解为我们能够看到的,操作的东西:在Android中什么才称为UI呢,可以简单的理解为View及其子类等元素.这是一个不够正确的概念,只是对新手做一个简单的抛砖引玉. 2.ANR:Application Not Responding,意思是程序没有响应. 在如下情况下,Android会报出

SWT的UI线程和非UI线程

要理解UI线程,先要了解一下"消息循环"这个概念.链接是百度百科上的条目,简单地说,操作系统把用户界面上的每个操作都转化成为对应的消息,加入消息队列.然后把消息转发给对应的应用程序(一般来说,就是活动窗口),应用程序根据自己的逻辑处理这些消息. 如果应用程序处理某个消息事件的时候,用了很长的时间,这时候后续的消息无法及时得到处理,就会造成应用程序没有响应,也就是常说的"假死"状态. 所以,应用程序如果处理某个事件需要较长的时间,需要把这个操作放到一个另外的线程中进行