好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#停止线程的方法

本文实例讲述了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#程序设计有所帮助。

dy("nrwz");

查看更多关于C#停止线程的方法的详细内容...

  阅读:89次