使用线程操作刷新Winform界面

主窗体中添加代码

public FrmMain()
        {
            InitializeComponent();
            System.Threading.Thread thread = new System.Threading.Thread(Do_work);
                thread.IsBackground = true;
                thread.Start();
        }

 private void Do_work()
        {
            while (true)
            {
                //将sleep和无限循环放在等待异步的外面
                System.Threading.Thread.Sleep(5000);
                System.Windows.Forms.Application.DoEvents();
                ThreadFuntion();
            }

        }

 private void ThreadFuntion()
        {
            if (this.label_State.InvokeRequired)
            {
                //1 通常方法:将代理绑定到方法
                FlushClient fc = new FlushClient(ThreadFuntion);
                this.BeginInvoke(fc);//通过代理调用刷新方法
            }
            else
            {
                label_State.Text = "程序已经运行5秒钟了";
            }
        }
时间: 2024-11-10 12:01:37

使用线程操作刷新Winform界面的相关文章

C#在工作线程刷新主界面控件状态小结,单例模式、委托

今日项目开发中需要在服务器界面实时显示客户端连接状态,使用C#的反射机制解决了问题.由于项目比较复杂,现结合一个小例子,对使用C#委托反射机制刷新主界面上的控件状态进行简单小结,希望对新手有所帮助. 一.新建一个C# winform工程:Form_MainUI,界面布局如图1. 代码如下: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data;

winform频繁刷新导致界面闪烁解决方法

转自龙心文 原文 winform频繁刷新导致界面闪烁解决方法 一.通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供的默认双缓冲将提供最佳效果.默认情况下,标准 Windows 窗体控件是双缓冲的.可以通过两种方法对窗体和所创作的控件启用默认双缓冲.一种方法是将 DoubleBuffered 属性设置为 true,另一种方法是通过调用 SetStyle 方法将 OptimizedDoubleBuffer 标志设置

扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常

在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件.但对于数据绑定bindingList而言,没法响应listchang事件,导致后端的grid等控件不能更新数据.废了好大的劲终于找到一个UIBindingList,实现线程数据的同步! using System; using System.ComponentModel; using System.Threading; using System.Wi

Winform跨线程操作GUI

一直以来都是做Web开发,虽然乱七八糟什么都接触一些,但几乎不怎么接触Winform, WPF这些,也很少接触多线程开发. 在公司有时候没有事儿做,但又不能随意上网浏览新闻什么的,会被IT监控,看多了总归不好.QQ也被禁用.大家用的都是OC.OC的聊天记录也会被上传到服务器.所以闲着的时候就开始决定做一个Winform的聊天室.初步包括 登陆,群聊,私聊,查看在线列表 这些基本功能. 今天遇到一个问题,上网查了一下,答案虽然正确,但让初步接触的我看的稀里糊涂的,大部分都是复制粘贴,甚至还出现了中

C#中利用委托实现多线程跨线程操作

在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了保证线程安全以及提高代码的效率所做的改进,但是也给大家带来很多不便. 其实解决这个问题有两种方法:一,是通过设置System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;在你的程序初始化的时候设置了这个属性,而且在你的控件中使用的都是微软Framework类库中的控件的话,系统就不会再抛出你上面所说的

C# 跨线程操作控件方法封装

Winform程序需要处理耗时操作时,往往需要将耗时操作放入新开的子线程进行处理,在子线程中可能会经常去修改或操作主线程上的控件: 如果直接在子线程中操作控件,会报线程间操作无效等错误,这里提供一个我自己经常使用的跨线程操作方式,代码如下: //跨线程操作控件 //(将数据全部装填完毕后,在一起放到主界面刷新控件:不要一边装填一边刷新主界面控件,这样依然会导致界面卡顿) public void showMsg(string str) { if (textBox.InvokeRequired) {

windows程序消息机制(Winform界面更新有关)

windows程序消息机制(Winform界面更新有关) 转自:http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html 1. Windows程序消息机制 Windows GUI程序是基于消息机制的,有个主线程维护着消息泵.这个消息泵让windows程序生生不息. Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源.这里的While循环使用了GetMessage() 这个方法,这是个阻塞方法,也就是队列

Web界面和Winform界面生成,代码生成工具

在上面一篇随笔<代码生成工具之界面快速生成>介绍了代码生成工具Database2Sharp的界面生成操作,其中介绍了Web界面(包括列表界面.内容显示.内容编辑界面的生成,另外还介绍了Winform界面的内容编辑界面的生成,本篇主要继续介绍Winform界面生成中的查询列表界面的操作展示等信息. 基于Winform的界面生成,配合我的Winform开发框架,提供了三种不同的界面生成,包括传统界面样式.DotNetBar界面样式和DevExpress界面样式的代码生成,这几种界面是目前Winfo

C#跨线程操作控件的最简单实现探究

随着程序复杂度的提高,程序不可避免会出现多个线程,此时就很可能存在跨线程操作控件的问题. 跨线程操作UI控件主要有三类方式: 1.禁止系统的线程间操作检查.(此法不建议使用) 2.使用Invoke(同步)或者BeginInvoke(异步).(使用委托实现,并用lambda表达式简化代码) 3.使用BackgroundWorker组件.(此法暂不介绍,详情可见文末的参考资料) 先看一个跨线程操作失败的例子: 新建一个Winform窗口程序项目,拖一个button1和label1控件到Form1窗体