Winform 多线程--解决界面卡死问题
public class ThreadInvoker
{
/// <summary>
/// 回调委托 带参数的
/// </summary>
/// <param name="InvokerClass"></param>
public delegate void CallbackFunc(InvokerClass InvokerClass);
/// <summary>
/// 回调委托的方法
/// </summary>
public CallbackFunc AsynCallback;
/// <summary>
/// 线程
/// </summary>
public Thread thread;
/// <summary>
/// 执行循环停止属性
/// </summary>
public bool Stop = false;
/// <summary>
/// 休眠间隔
/// </summary>
public int Sleep = ;
public ThreadInvoker(CallbackFunc callback)
{
AsynCallback = callback;
}
public virtual void Start(ThreadStart ThreadStart)
{
thread = new Thread(ThreadStart);
thread.Start();
} public virtual void Start(ParameterizedThreadStart ThreadStart)
{
thread = new Thread(ThreadStart);
thread.Start();
}
}
public class InvokerClass
{
public string String { get; set; } }
使用方法
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ThreadInvoker ti; private void Form1_Load(object sender, EventArgs e)
{ } public void Excete(object InvokerClass)
{
InvokerClass _InvokerClass = InvokerClass as InvokerClass;
while (!ti.Stop)
{
if (null == _InvokerClass)
_InvokerClass = new InvokerClass(); _InvokerClass.String = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
ti.AsynCallback(_InvokerClass);
Thread.Sleep(ti.Sleep);
}
} public void AsynUpdateTxtMethod(InvokerClass InvokerClass)
{
if (this.richTextBox1.InvokeRequired)
{
this.BeginInvoke(new ThreadInvoker.CallbackFunc(updatemethod), InvokerClass);
}
else
{
updatemethod(InvokerClass);
}
} public void updatemethod(InvokerClass InvokerClass)
{
this.richTextBox1.AppendText(InvokerClass.String + "\r\n");
this.richTextBox1.ScrollToCaret();
} /// <summary>
/// 启动
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
ti = new ThreadInvoker(AsynUpdateTxtMethod);
ti.Stop = false;
ti.Start(new System.Threading.ParameterizedThreadStart(Excete));
} private void button2_Click(object sender, EventArgs e)
{
ti.Stop = true;
}
}

实现效果
Winform 多线程--解决界面卡死问题的更多相关文章
- C#多线程解决界面卡死问题
C#多线程解决界面卡死问题的完美解决方案 文章下最方有源码下载 问题描述:当我们的界面需要在程序运行中不断更新数据时, 当一个textbox的数据需要变化时, 对于这个问题可以先参考下我的另外一个文章 ...
- C#多线程解决界面卡死问题的完美解决方案
C#多线程解决界面卡死问题的完美解决方案 文章转自http://www.sufeinet.com/thread-3556-1-1.html 问题描述: 当我们的界面需要在程序运行中不断更新数据时, 当 ...
- C#多线程解决界面卡死问题的完美解决方案,BeginInvoke而不是委托delegate 转载
问题描述:当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面卡死的现像,最好的方法就是多线程来解决一个主线程来创建界面,使用一个子线程来执行程 ...
- winform 防止主界面卡死
总结网络上的解决方案:新线程=> 委托=> 主界面的异步更新方法(IAsyncResult BeginInvoke(Delegate method)),一句话就是通过委托调用另一个线程的异 ...
- 多线程、委托、Invoke解决winform界面卡死的问题,并带开关
一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...
- WPF--Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
原文地址: http://www.tuicool.com/articles/F7reem http://blog.csdn.net/yl2isoft/article/details/11711833 ...
- Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
原文:Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析 前段时间,公司同事开发了一个小工具,在工具执行过程中,UI界面一直处于卡死状态. 通过阅读代码发现,主要是 ...
- Delphi编程防止界面卡死的方法经验分享
Delphi编程防止界面卡死的方法经验分享! 1.循环里面防止界面卡死的方法可以使用Application.ProcessMessages: 例如下列方法: var n: Integ ...
- WinForm多线程+委托防止界面卡死
1.当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决 using System; using System.Collections.Gener ...
随机推荐
- 威伦TK6070iQ触摸屏的使用
A.TK6070iQ只支持U盘互相倒腾. TK6070iQ有2个串口Com1 (232) Com2 (485) U盘上传 需要选择COM2(485),因为上传后是PLC与触摸屏通过485通讯,协议选s ...
- 使用bat批处理文件定时自动备份oracle数据库并上传ftp服务器
一.使用bat批处理文件备份oracle(前提是配置好oracle数据库客户端) @echo off set databasename=orcl //数据库名 set username=ninic ...
- 谈谈thinkphp5.1中容器(Container)和门面(Facade)的实现
tp5.1中引入了容器(Container)和门面(Facade)这两个新的类 官方文档已经给出了定义: 容器(Container)实现类的统一管理,确保对象实例的唯一性. 门面(Facade)为容器 ...
- C# 结构(struct)的特点
1.C# 中的结构有以下特点: 结构可带有方法.字段.索引.属性.运算符方法和事件. 结构可定义构造函数,但不能定义析构函数.但是,您不能为结构定义默认的构造函数.默认的构造函数是自动定义的,且不能被 ...
- IntelliJ IDEA 2017版 spring-boot2.0.4的集成JSP
一.必须依赖四个包,其中三个是springboot自带包,可以不写版本号,有一个不在springboot中,需要设置版本号 <!--引入Spring Boot内嵌的Tomcat对Jsp的解析包- ...
- 第29章:MongoDB-索引--全文索引
①全文索引 全文索引是用于对长文本检索来使用的,是用正则表达式只能对字符串类型的值进行检索.注意:创建索引是一件比较耗时耗费资源的事情,而全文索引更是耗时更厉害,如果对索引键的内容比较长,需要对内容进 ...
- (转)手把手图文教你eclipse下如何配置tomcat
转自:http://jingyan.baidu.com/article/ca2d939dd90183eb6d31ce79.html 很多初学,尤其自学JavaWeb的朋友首次在eclipse下配置to ...
- (树状数组+离散化)lines--hdu --5124
http://acm.hdu.edu.cn/showproblem.php?pid=5124 lines Time Limit: 5000/2500 MS (Java/Others) Memor ...
- html5+javascript的管廊监控页面
这周二做的,支持苹果手机,安卓手机,电脑,平板访问
- 【python-excel】Selenium+python自动化之读取Excel数据(xlrd)
Selenium2+python自动化之读取Excel数据(xlrd) 转载地址:http://www.cnblogs.com/lingzeng86/p/6793398.html ·········· ...