作者sdwufei (玉鼎)
看板C_Sharp
标题[问题] 第一次接触多执行绪遇到重复建立的疑问
时间Tue Dec 19 16:47:12 2017
我建了一个简单的小程式在测试多执行绪
Form里放了一个Textbox,两个Button
多执行绪内容如下
a = 0;
while (true)
{
a++;
textBox1.Text = a.ToString();
if (a >= 10000)
{
sample.Abort();
}
}
Button1内容如下
sample = new Thread(Thread_test);
sample.IsBackground = true;
sample.Start();
Button2内容如下
sample.Abort();
现在的疑问点,我在正常操作流程,点一次Button1,等sample跑完,再点,等跑完。
或者是点一次Button1,在sample还没跑完,点Button2使sample停止,动作都很正常。
现在疑问点,在假设我按了一次Button1,在还没执行完毕时,再按一次Button1,
感觉会有两个thread再执行,可以看到sample.ManagedThreadId在第二次按下时有改
变。但发现thread似乎就停不下来了。
我另外写了一个timer判断sample.IsAlive,但我看到的是当textbox1数值到达10000
时,sample.IsAlive以经是false,但实际上我的textbox1依然再增加。
想请问这个状况我能怎样关闭?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.163.70.252
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1513673235.A.A9F.html
1F:推 anumis: 你在thread里变更ui元件,应该是会炸掉,先把textbox那块 12/19 17:20
2F:→ anumis: 用invoke包起来吧 12/19 17:20
3F:→ alanturing: 怎麽不考虑Task/async/await 12/20 16:13
4F:→ pzyc79: if (a >= 10000) Thread.CurrentThread.Abort(); 12/20 22:41
5F:→ pzyc79: 因为你在按第二次的时候第一次的参考被你新的Thread盖掉 12/20 22:42
6F:→ pzyc79: 当然就没办法用原来的sample这的参考去中止它 12/20 22:43