[问题] 第一次接触多执行绪遇到重复建立的疑问

楼主: sdwufei (玉鼎)   2017-12-19 16:47:12
我建了一个简单的小程式在测试多执行绪
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依然再增加。
想请问这个状况我能怎样关闭?
作者: anumis (阿努米斯)   2017-12-19 17:20:00
你在thread里变更ui元件,应该是会炸掉,先把textbox那块用invoke包起来吧
作者: alanturing (alan)   2017-12-20 16:13:00
怎么不考虑Task/async/await
作者: pzyc79   2017-12-20 22:41:00
if (a >= 10000) Thread.CurrentThread.Abort();因为你在按第二次的时候第一次的参考被你新的Thread盖掉当然就没办法用原来的sample这的参考去中止它

Links booklink

Contact Us: admin [ a t ] ucptt.com