本文实例讲述了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#程序设计有所帮助。
我正在寻找一种方法来停止/杀死线程,我看到Thread.stop()已被弃用。所以我开始寻找另一个解决方案,并看到多个帖子建议这样做: 但这不会阻止我的线程,我的线程看起来像这样: 有人得到我可以用来停止/杀死我的线程的解决方案吗?非常感谢任何帮助。
问题内容: 我正在编写一段连接到服务器的代码,使用该连接会生成一堆线程并执行一堆“工作”。 在某些情况下,连接失败,我需要停止所有操作并从头开始创建新对象。 我想在对象之后进行清理,但在线程上调用thread.stop,但是此方法似乎已被弃用。 推荐的替代方法是什么?是否应该为每个线程编写自己的清理和退出方法?将线程设置为null?或者是其他东西? 问题答案: 看这里 : 在HowToStopAT
所以这是我需要解决的大事。我有Visual C#应用程序。在这个应用程序中,用户输入数据并单击Execute。当他们点击执行时,核心方法开始在新线程中,在那个线程和方法是一个循环。不断地使用方法调用器,我向UserForm发送更新,循环实际上在做什么。例如,像这样,我在每个cicle中更新progressBar。
问题内容: 我有一个按钮“ addCashier”,它正在创建一个名为“ Cashier”的线程,现在该线程只是每4秒简单地生成一个订单,该线程的run()方法中有while(true)循环。那里一切都很好,但是现在我想添加一个按钮来模拟收银员注销。我在我的while循环onDuty和一个公共函数logOff()中添加了一个布尔变量,该函数将onDuty布尔值设置为false,以使我退出运行的wh
本文向大家介绍Java 停止线程需要注意的地方,包括了Java 停止线程需要注意的地方的使用技巧和注意事项,需要的朋友参考一下 Java中停止线程的原则是什么? 在 Java 中, 最好的停止线程的方式是使用中断 interrupt, 但是这仅仅是会通知到被终止的线程 "你该停止运行了", 被终止的线程自身拥有决定权 (决定是否、以及何时停止), 这依赖于请求停止方和被停止方都遵守一种约定好的编码