您的位置:首页 > 其它

一个winform中多线程的例子

2013-04-14 00:17 405 查看
先看效果

View Code

using System;
using System.Threading;
using System.Windows.Forms;

namespace WinformApp
{
public partial class Form1 : Form
{
private CancellationTokenSource _cts;
public Form1()
{
InitializeComponent();
}

/// <summary>
/// 从1累加到指定的值,为了让该方法支持取消操作所以需要CancellationToken参数
/// </summary>
/// <param name="countTo">累加到的指定值</param>
/// <param name="ct">取消凭证</param>
private void CountTo(int countTo, CancellationToken ct) {
int sum = 0;
for (; countTo > 0; countTo--) {
if (ct.IsCancellationRequested) {
break;
}
sum += countTo;
//Invoke方法用于获得创建lbl_Status的线程所在的上下文
this.Invoke(new Action(()=>lbl_Status.Text = sum.ToString()));

Thread.Sleep(200);
}
}

private void btn_Count_Click(object sender, EventArgs e)
{
_cts = new CancellationTokenSource();
ThreadPool.QueueUserWorkItem(state=>CountTo(int.Parse(txt_CountTo.Text),_cts.Token));
}

private void btn_Cancel_Click(object sender, EventArgs e)
{
if (_cts != null)
_cts.Cancel();
}

private void btn_Pause_Click(object sender, EventArgs e)
{

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: