c# UI线程更新 阻塞问题

问题描述

在一个窗口中有动态显示当前得到时间label还有动态显示当前摄像头的图像,还有一些功能按钮,当我点击功能按钮的时候动态显示的时间还有图像会有卡顿请问有可能避免吗,请教啊!急!!!

解决方案

解决方案二:
如果你把工作都在前台线程做,无论如何都会卡,只是有时候卡的时间太短,让你觉得不卡而已。对于这种让界面卡的工作,你应该用一个后台线程(BackgroundWorker)去处理。
解决方案三:
publicstaticclassControlCrossThreadCalls{publicdelegatevoidShowInvokeHandler();publicstaticvoidShowInvoke(Controlcontrol,ShowInvokeHandlerhandler){try{if(control.InvokeRequired){control.Invoke(handler);}else{handler();}}catch(Exceptione){MessageBox.Show(e.Message);}}}

///<summary>///线程中安全访问控件,避免重复的delegate,Invoke///</summary>publicstaticclassCrossThreadCalls{publicdelegatevoidShowTaskDelegate();publicdelegatevoidShowInvokeMethodDelegate(Controlcontrol,ShowTaskDelegatehandler);publicstaticvoidSafeInvoke(Controlcontrol,ShowTaskDelegatehandler){if(control.InvokeRequired){while(!control.IsHandleCreated){if(control.Disposing||control.IsDisposed){return;}}IAsyncResultresult=control.BeginInvoke(newShowInvokeMethodDelegate(SafeInvoke),newobject[]{control,handler});control.EndInvoke(result);//获取委托执行结果的返回值return;}IAsyncResultresult2=control.BeginInvoke(handler);control.EndInvoke(result2);}}

调用ControlCrossThreadCalls.ShowInvoke(this.dataGridView1(这里换成你的控件),newControlCrossThreadCalls.ShowInvokeHandler(delegate(){//你的赋值等操作}));

时间: 2024-08-31 23:18:39

c# UI线程更新 阻塞问题的相关文章

学习通过Thread+Handler实现非UI线程更新UI组件(转)

  [Android线程机制]    出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则:只允许UI线程修改Activity里的UI组件    当一个程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件,用户接触屏幕的事件及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以主线程通常又被叫

jQuery同步Ajax带来的UI线程阻塞问题及解决办法

遇到了同步Ajax引起的UI线程阻塞问题,在此记录一下. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return.基本的逻辑剥离出来是这样的: function getData1(){         var result;         $.ajax({             url : "p.php",             async : false,  

android中子线程更新UI的方式

一.为何写作此文 你是不是经常看到很多书籍中说:不能在子线程中操作ui,不然会报错.你是不是也遇到了如下的疑惑(见下面的代码): (Bundle savedInstanceState) { .onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); Thread.currentThread().setName(); LooperThrea

Jquery ajax 同步阻塞引起的UI线程阻塞问题_jquery

最近做一个项目,遇到了一个问题同步ajax引起的ui线程阻塞问题,下面把我的问题解决过程分享给大家. 事情起因是这样的,因为页面上有多个相似的异步请求动作,本着提高代码可重用性的原则,我封装了一个名为getData的函数,它接收不同参数,只负责获取数据,然后把数据return.基本的逻辑剥离出来是这样的: function getData1(){ var result; $.ajax({ url : "p.php", async : false, success: function(d

wpf 线程-WPF UI线程问题 急急急急急急急急急急急

问题描述 WPF UI线程问题 急急急急急急急急急急急 已经调用UI线程更新操作位什么还出现这个问题啊? propertyManage1.Dispatcher.Invoke(new Action(delegate { propertyManage1.Children.Add(canvas); })); 调用线程无法访问此对象,因为另一个线程拥有该对象

Android 在其他线程中更新UI线程的解决方法_Android

方法一:Activity.runOnUiThread(Runnable )(经验之道: 这个最好用, 凡是要刷新页面的地方,Activity.runOnUiThread( new Runnable()  { public void run(){更新UI}}); 方法二:子线程调用Handler的sendMessage(message)发送事件. 复制代码 代码如下: mHandler = new Handler() {     @Override     public void handleMe

更新ui-求指点,Handler更新UI线程问题

问题描述 求指点,Handler更新UI线程问题 public Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 0x123: one.setImageResource(imageIds[currentIm

OkHttp3几个简单的例子和在子线程更新UI线程的方法

okHttp用于android的http请求.据说很厉害,我们来一起尝尝鲜.但是使用okHttp也会有一些小坑,后面会讲到如何掉进坑里并爬出来. 首先需要了解一点,这里说的UI线程和主线程是一回事儿.就是唯一可以更新UI的线程.这个只是点会在给okHttp填坑的时候用到.而且,这个内容本身在日常的开发中也经常用到,值得好好学一学. okHttp发起同步请求 第一个列子是一个同步请求的例子. private void performSyncHttpRequest() { OkHttpClient

关于winform中多线程调用AX控件中的方法会阻塞UI线程的问题

问题描述 本人新手...winform中子线程调用AX控件中的某个耗时的方法(3.4秒)会阻塞UI线程,请问有没有办法在子线程中创建AX控件,让子线程去执行AX控件中的方法呢? 解决方案 解决方案二:你可以尝试直接在新的线程里执行该方法,不行的话只能由控件编写者提供异步的方法解决方案三:winform中子线程调用AX控件中的某个耗时的方法(3.4秒)会阻塞UI线程既然你是在子线程里调用,为什么会阻塞UI线程?放出你的代码来解决方案四:控件是vc写的,拖到form上的,SCM_Card_Chb是控