一、多线程创建后,窗体出现假死
解决:创建线程之后,在下面代码加上一句:Application.DoEvents();即可。
二、窗口关闭时,线程全部停止
解决:将其设置为后台进程:thread.IsBackground = true;但是有时需要循环创建线程时就不这么好使了,最后我用了简单粗暴的方法:System.Environment.Exit(0);
三、窗口不关闭的情况下,线程停止
问题背景:我使用了循环去创建线程,看网上使用thread.abort();可以终止线程,但是试了之后并不理想,因为是循环创建,在其他操作触发时无法停止循环。
解决:此时我的思路是:定义一个线程创建标识,当要停止线程时,则置为false,在循环中判断此变量来控制是否创建线程。
部分代码如下:
1、设置一个全局变量
private static bool G_ThreadFlagVO = true;//是否创建线程标识,用于关闭功能时停止线程的创建
2、关闭功能时,将标识变量置为false
G_ThreadFlagVO = false;
3、在循环创建线程处的处理
foreach (var item in orderDataArr)
{
if (G_ThreadFlagVO)
{
//多线程处理
Thread thread = new Thread(new ParameterizedThreadStart(orderDeal));
thread.IsBackground = true;
thread.Start(item);
//防止窗口出现假死状态
Application.DoEvents();
}
else
{
return;//结束执行此函数的后续代码
}
}
四、线程中与winform控件交互报错:
解决:在使用线程前加上代码:线程间操作无效: 从不是创建控件“XXXX”的线程访问它。
Control.CheckForIllegalCrossThreadCalls = false;
或者使用委托。委托方法请自行百度。