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 多线程--解决界面卡死问题的更多相关文章

  1. C#多线程解决界面卡死问题

    C#多线程解决界面卡死问题的完美解决方案 文章下最方有源码下载 问题描述:当我们的界面需要在程序运行中不断更新数据时, 当一个textbox的数据需要变化时, 对于这个问题可以先参考下我的另外一个文章 ...

  2. C#多线程解决界面卡死问题的完美解决方案

    C#多线程解决界面卡死问题的完美解决方案 文章转自http://www.sufeinet.com/thread-3556-1-1.html 问题描述: 当我们的界面需要在程序运行中不断更新数据时, 当 ...

  3. C#多线程解决界面卡死问题的完美解决方案,BeginInvoke而不是委托delegate 转载

    问题描述:当我们的界面需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现界面卡死的现像,最好的方法就是多线程来解决一个主线程来创建界面,使用一个子线程来执行程 ...

  4. winform 防止主界面卡死

    总结网络上的解决方案:新线程=> 委托=> 主界面的异步更新方法(IAsyncResult BeginInvoke(Delegate method)),一句话就是通过委托调用另一个线程的异 ...

  5. 多线程、委托、Invoke解决winform界面卡死的问题,并带开关

    一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...

  6. WPF--Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析

    原文地址: http://www.tuicool.com/articles/F7reem http://blog.csdn.net/yl2isoft/article/details/11711833 ...

  7. Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析

    原文:Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析 前段时间,公司同事开发了一个小工具,在工具执行过程中,UI界面一直处于卡死状态. 通过阅读代码发现,主要是 ...

  8. Delphi编程防止界面卡死的方法经验分享

    Delphi编程防止界面卡死的方法经验分享! 1.循环里面防止界面卡死的方法可以使用Application.ProcessMessages:  例如下列方法:    var      n: Integ ...

  9. WinForm多线程+委托防止界面卡死

    1.当有大量数据需要计算.显示在界面或者调用sleep函数时,容易导致界面卡死,可以采用多线程加委托的方法解决 using System; using System.Collections.Gener ...

随机推荐

  1. elasticsearch中文发行版 安装

    参见: https://github.com/medcl/elasticsearch-rtf 具体步骤参见:ubuntu安装elasticsearch-rtf elasticsearch-head 安 ...

  2. hashchange事件

    h5新增了hashchange事件,以便在URL参数列表(及URL中‘#’号后面的所有字符串),发生变化时通知开发人员. 之所以要添加这个事件,是因为在Ajax应用中,开发人员经常要利用URL参数列表 ...

  3. c语言结构体链表

    原文链接:http://zhina123.blog.163.com/blog/static/417895782012106036289/ 引用自身的结构体,一个结构体中有一个或多个成员的基类型就是本结 ...

  4. GCC基础知识学习

    GCC基础知识学习 一.GCC编译选项解析 常用编译选项 命令格式:gcc [选项] [文件名] -E:仅执行编译预处理: -S:将C代码转换为汇编代码: -c:仅执行编译操作,不进行连接操作: -o ...

  5. Docker Compose部署 nginx代理Tomcat集群

    一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...

  6. Servlet组件之 jsp 技术

    JSP 简称java服务器页面(java server page),jsp和servlet实现了我们的开发需求.对于jsp技术我们首先需要知道他的组成    HTML+java+jsp内置对象=jsp ...

  7. noip第8课资料

  8. web-day16

    第16章WEB16-Listener&Filter篇 今日任务 使用过滤器完成自动登录的案例 使用过滤器统一网站的字符集编码 教学导航 教学目标 了解常见的监听器 理解过滤器的生命周期 能够使 ...

  9. thrift学习总结

    thrift 重要的几个组件有 :数据类型,transport,protocol,versioning,processor 1.数据类型 thrift的数据类型有1.一些原生类型,比如string,i ...

  10. POJ3111 K Best 2017-05-11 18:12 31人阅读 评论(0) 收藏

    K Best Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 10261   Accepted: 2644 Case Time ...