首页 > 编程 > C# > 正文

C#停止线程的方法

2020-01-24 01:31:22
字体:
来源:转载
供稿:网友

本文实例讲述了C#停止线程的方法。分享给大家供大家参考。具体实现方法如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WinFormApp{ public partial class Form1 : Form {  System.Threading.CancellationTokenSource cancel = new System.Threading.CancellationTokenSource();  System.Threading.Thread[] thread;  int len = 2;  public Form1()  {   InitializeComponent();   thread = new System.Threading.Thread[len];  }  void RunThread()  {   ThreadInvoke.SetEventInvokeValue(richTextBox1, "即将开始运行线程.");   System.Threading.Thread t = null;   for (int i = 0; i < len; i++)   {    t = new System.Threading.Thread(new System.Threading.ThreadStart(Sample));    t.Name = "thread_0" + i.ToString();    t.IsBackground = true;    thread.SetValue(t, i);    t.Start();   }  }  void Sample()  {   string name = System.Threading.Thread.CurrentThread.Name;   ThreadInvoke.SetEventInvokeValue(richTextBox1, "正在运行线程:" + name);   while (true)   {    if (cancel.IsCancellationRequested)    {     ThreadInvoke.SetEventInvokeValue(richTextBox1, "线程:" + name + " 停止运行...");     //线程被终止后回调     cancel.Token.Register(delegate     {      ThreadInvoke.SetEventInvokeValue(richTextBox1, "线程:" + name + " 停止运行之后的回调函数...");     });     break;    }   }  }  void ShowStatu()  {   StringBuilder sb = new StringBuilder();   for (int i = 0; i < len; i++)   {    if (thread[i].IsAlive == true)    {     sb.AppendLine("线程:" + thread[i].Name.ToString() + " 还在运行...");    }   }   if (sb.ToString() == "")   {    sb.AppendLine("线程已经全部停止...");   }   richTextBox1.Text += sb.ToString();  }  /// <summary>  /// 开始运行线程  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void button1_Click(object sender, EventArgs e)  {   RunThread();  }  /// <summary>  /// 显示所有的线程状态  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void button2_Click(object sender, EventArgs e)  {   ShowStatu();  }  /// <summary>  /// 终止所有的线程  /// </summary>  /// <param name="sender"></param>  /// <param name="e"></param>  private void button3_Click(object sender, EventArgs e)  {   cancel.Cancel();  } }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表