C# winform多线程问题解决总结

一、多线程创建后,窗体出现假死

解决:创建线程之后,在下面代码加上一句: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;

或者使用委托。委托方法请自行百度。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值