WinForm多线程编程简单Demo
需要搭建一个可以监控报告生成的CS(WinForm)工具,即CS不断Run,执行获取数据生成报告,经过研究和实践,选择了使用"WinForm多线程编程"的解决方案.当然参考了园中相关文章自己搞的一个Demo.
PS:由于报告生成非常耗费资源,使用单线程编程模式, 监控信息根本无法信息无法及时在RichText显示.
public partial class Form1 : Form
{ private CancellationTokenSource _cts; private int testNum = ; public Form1()
{
InitializeComponent(); } private void CreateRPT(CancellationToken ct)
{
while (true)
{
if (ct.IsCancellationRequested)
{
break;
}
//Invoke方法用于获得创建lbl_Status的线程所在的上下文
this.Invoke(new Action(() => richTextBox1.Text = testNum.ToString()));
testNum += ;
Thread.Sleep();
}
} private void btn_Count_Click(object sender, EventArgs e)
{
_cts = new CancellationTokenSource();
ThreadPool.QueueUserWorkItem(state => CreateRPT( _cts.Token ));
} private void btn_Cancel_Click(object sender, EventArgs e)
{
if (_cts != null)
_cts.Cancel();
} }
又看到一个风格
private void CreateRPT(CancellationToken ct)
{
while (true)
{
if (ct.IsCancellationRequested)
{
break;
}
//Invoke方法用于获得创建lbl_Status的线程所在的上下文
//this.Invoke(new Action(() => richTextBox1.Text = testNum.ToString()));
ViewMsg(testNum.ToString());
testNum += ;
Thread.Sleep();
}
} private void ViewMsg(string msg)
{ /* control.Invoke(new SetControlTextDelegate((ct, v) => { ct.Text = v; }), new object[] { control, value });
=>
control.Invoke(new Action<Control, string>((ct, v) => { ct.Text = v; }), new object[] { control, value }); */
this.richTextBox1.Invoke(new Action<RichTextBox, string>((ct, v) => { ct.AppendText(v); ct.Refresh(); }),new object[] { this.richTextBox1, msg });
this.richTextBox1.Invoke(new Action<string>((v) => { this.richTextBox1.AppendText(v); this.richTextBox1.Refresh(); }),msg);
}
WinForm多线程编程简单Demo的更多相关文章
- 浅述WinForm多线程编程与Control.Invoke的应用
VS2008.C#3.0在WinForm开发中,我们通常不希望当窗体上点了某个按钮执行某个业务的时候,窗体就被卡死了,直到该业务执行完毕后才缓过来.一个最直接的方法便是使用多线程.多线程编程的方式在W ...
- WinForm多线程编程与Control.Invoke的应用浅谈
在WinForm开发中,我们通常不希望当窗体上点了某个按钮执行某个业务的时候,窗体就被卡死了,直到该业务执行完毕后才缓过来.一个最直接的方法便是使用多线程.多线程编程的方式在WinForm开发中必不可 ...
- 【转】浅述WinForm多线程编程与Control.Invoke的应用
环境:VS2008.C#3.0 在WinForm开发中,我们通常不希望当窗体上点了某个按钮执行某个业务的时候,窗体就被卡死了,直到该业务执行完毕后才缓过来.一个最直接的方法便是使用多线程.多线程编程的 ...
- C++多线程编程简单实例
C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下: 创建线程的函数 HANDLE CreateThread( ...
- java多线程的简单demo
模拟场景:顾客买车从车库中取车,厂家生产车,车存储在车库中.买家.厂家对同一个车库中的车操作 一.不加同步机制的代码如下: package com.joysuch.testng.thread; imp ...
- winform 多线程编程
参考资料: WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件) c# 使用定时器Timer
- C#多线程最简单Demo
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- WinForm多线程学习文档
基础篇 怎样创建一个线程 受托管的线程与 Windows线程 前台线程与后台线程 名为BeginXXX和EndXXX的方法是做什么用的 异步和多线程有什么关联 WinForm多线程编程篇 我的多线程W ...
- C#多线程编程总结
VS2008.C#3.0在WinForm开发中,我们通常不希望当窗体上点了某个按钮执行某个业务的时候,窗体就被卡死了,直到该业务执行完毕后才缓过来.一个最直接的方法便是使用多线程.多线程编程的方式在W ...
随机推荐
- 开源License
http://www.open-open.com/bbs/view/1319816219625 http://my.oschina.net/yangsheng/blog/190917
- Starling Tutorial
http://www.hsharma.com/tutorials/starting-with-starling-ep-1-intro-setup/
- Ctrl+Scroll改变所有Editor的缩放比例 (Code::Blocks)
Settings > Editor > Zooming resizes all editors
- Swiper基本上使用
导入三个文件 jquery-1.11.1.min.js,swiper.min.js,swiper.min.css 攻略教程 http://www.swiper.com.cn/api/function/ ...
- Robot Framework--01 创建简单工程示例
1.新建Project: 填写name,选择Type为Dirctory,路径根据自己需要选择,建议最好不要在中文路径下,以免发生问题:
- ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题 标签: myeclipsejavawebWeb App Libraries 2013-10-16 1 ...
- Thrift 的原理和使用
thrift 的原理和使用 Thrift 架构 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过IDL(Interf ...
- Mongodb 资源
一.资源 1.C# 驱动下载地址 https://github.com/mongodb/mongo-csharp-driver/releases 2. Mongodb 管理工具 mongochef 下 ...
- java 的 AccessController.doPrivileged使用
AccessController.doPrivileged意思是这个是特别的,不用做权限检查. 在什么地方会用到呢:加入1.jar中有类可以读取一个文件,现在我们要使用1.jar去做这个事情.但是我们 ...
- 深入浅出JMS(一)--JMS基本概念
from:http://blog.csdn.net/jiuqiyuliang/article/details/46701559 深入浅出JMS(一)--JMS基本概念 标签: jmsmessagin ...