NetworkComms网络程序开发笔记(二): 跨线程更新UI

跨线程更新UI的方法也很多

使用系统自带的 MethodInvoker 委托也不失为一个好方法

举例1

 void NetworkComms_ConnectionClosed(Connection conn)
        {
            if (this.InvokeRequired)
            {
                MethodInvoker del = delegate
                {
                    NetworkComms_ConnectionClosed(conn);
                };
                this.Invoke(del);
                return;
            }

            textBox1.Text = "";             textBox1.Text = "【连接断开:本地端点" + conn.ConnectionInfo.LocalEndPoint.ToString() + "远端点" + conn.ConnectionInfo.RemoteEndPoint.ToString() + "】";}

例2:

 private void UpdateLabel3(string text)
        {
            if (this.InvokeRequired)
            {
                MethodInvoker del = delegate
                {
                    UpdateLabel3(text);
                };
                this.Invoke(del);
                return;
            }

            label3.Text = text;

        }
时间: 2024-10-08 04:31:13

NetworkComms网络程序开发笔记(二): 跨线程更新UI的相关文章

NetworkComms网络程序开发笔记(一): 在多线程环境中安全的触发事件

在多线程中触发事件可能抛出引用为空的异常,这个问题网上有很多论述. NetworkComms通信框架本身几乎没有使用事件,所以在核心通信框架中不存在这个问题. 在网上查了很多资料,比如下面这个: 我们采用的方案: public static class Extensions { public static void Raise<T>(this EventHandler<T> handler, object sender, T args) where T : EventArgs {

(转).NET 4.5中使用Task.Run和Parallel.For()实现的C# Winform多线程任务及跨线程更新UI控件综合实例

http://2sharings.com/2014/net-4-5-task-run-parallel-for-winform-cross-multiple-threads-update-ui-demo 在C# WINFORM的开发中,难免会遇到多线程的开发以提高程序的执行效率.自己刚才开始在做多线程的开发时也遇到了很多这方面的问题,比如:如何使用并实现多线程功能.跨线程更新UI控件等问题.还记得最初使用的是System.Threading命名空间下的Thread类来实现的: C# 1 2 3

C# Winform 跨线程更新UI控件常用方法总结(转)

出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常.处理跨线程更新Winform UI控件常用的方法有4种: 1. 通过UI线程的SynchronizationContext的Post/Send方法更新: 2. 通过UI控件的Invoke/BegainInvoke方法更新: 3. 通过BackgroundWorker取代Thre

C# Winform 跨线程更新UI控件常用方法汇总

C# Winform 跨线程更新UI控件常用方法汇总 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常.处理跨线程更新Winform UI控件常用的方法有4种:1. 通过UI线程的SynchronizationContext的Post/Send方法更新:2. 通过UI控件的Invoke/BeginInvoke方法更新: 3. 通过BackgroundWorker取代Thread执行异步操作:4. 通过设置窗体

iOS开发- reloadData无效 (子线程更新UI错误)

今天在写一个聊天工具的时候遇到了一个问题. 注册的通知里面, 每当有其他用户发来消息的时候,  UITableView 就要重新更新 [objc] view plaincopy cell.textLabel.textColor = [UIColor redColor]; 使用红色标记cell名字来突出显示新消息.  (当然,, 这只是个demo, 效果比较渣.  正常情况应该是用户头像跳动或者显示新消息条数...) 可是我发现,  调用了这样的更新语句后, UITableVIew里面的数据并没有

C#多线程与UI响应 跨线程更新UI

最近在写一个TCP通信程序,自定义了一个通信类TCPclient,用于客户端异步接收和发送网络消息. TCPclient中定义了一个接收到新的网络消息事件: 1 //收到新消息事件 2 public delegate void receiveNewNetworkMsgHandler( string networkMSG); 3 public event receiveNewNetworkMsgHandler receiveNewNetworkMsg; 在外部的窗体中订阅了此事件: void th

[转]C#利用委托跨线程更新UI数据

在使用C#的过程中,难免会用到多线程,而用多线程之后,线程如何与界面交互则是一个非常头疼的问题.其实不仅仅是界面,一般情况下,我们往往需要获得线程的一些信息来确定线程的状态.比较好的方式是用委托实现,看例子: class TestClass { //声明一个delegate(委托)类型:testDelegate,该类型可以搭载返回值为空,参数只有一个(long型)的方法. public delegate void testDelegate(long i); //声明一个testDelegate类

使用Task来实现跨线程更新UI

public partial class Form1 : Form { public Form1() { InitializeComponent(); var task = Task.Factory.StartNew(() => { for (int i = 0; i < 9999; i++) { UpdateText("测试" + i); Thread.Sleep(1000); } }); } public void UpdateText(string text) { i

C#子线程更新UI控件的方法总结

http://blog.csdn.net/jqncc/article/details/16342121 在winform C/S程序中经常会在子线程中更新控件的情况,桌面程序UI线程是主线程,当试图从子线程直接修改控件属性时会出现“从不是创建控件的线程访问它”的异常提示. 跨线程更新UI控件的常用方法有两种: 1.使用控件自身的invoke/BeginInvoke方法 2.使用SynchronizationContext的Post/Send方法更新 1.使用控件自身的invoke/BeginIn