C# 多线程的问题,子线程会自己停止的吗?

IT_study001 2020-09-11 02:58:07
.net 程序 执行过程 突然方法就没有执行下一步了。查阅网上的资料得知 可能是因为子线程出现异常,状态处于正在终止的状态。请问什么情况造成的子线程自己停止的情况。如果有了解的大神帮忙解答一下,因为没有明显的异常抛出,不知道是不是代码出现问题,如果有需要。后续补上也可
...全文
6274 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2020-09-14
  • 打赏
  • 举报
回复
普遍来说,是子线程异常了。 这个需要查看:
if (Name == "一键分析")
                    {
                        Analysis_XX1(analyMonth,0);
 
                        Analysis_XX2(analyMonth,0);
 
                        Analysis_XX(analyMonth,0);
 
                    }
                    else if(Name == "XX")
                    {
                        Analysis_XX(analyMonth,0);           
                    }
                    else if (Name == "XX1")
                    {
                        Analysis_XX1(analyMonth,0);
                    }
                    else if (Name == "XX2")
                    {
                        Analysis_XX2(analyMonth,0);
 
                    }
正怒月神 2020-09-14
  • 打赏
  • 举报
回复
普遍来说,局势子线程异常了。 要查看
wc_ling 2020-09-14
  • 打赏
  • 举报
回复
Analysis_XX1(analyMonth,0); Analysis_XX2(analyMonth,0); Analysis_XX(analyMonth,0); 肯定是这几个方法里面有错误了 还有多线程编程一定要用日志来调试,不然没法调试
ziqi0716 2020-09-14
  • 打赏
  • 举报
回复
子线程里面加入try...catch语句,在catch语句中打断点写日志等捕获处理下异常.
strife013 2020-09-14
  • 打赏
  • 举报
回复
后端线程不会自动停,程序结束后还会继续,前端线程会在主程序停止后停止,有个Thread.IsBackEnd 属性在初始化时候设置
IT_study001 2020-09-12
  • 打赏
  • 举报
回复
引用 8 楼 choueny 的回复:
可以把这段放到主线程里,然后试试使用try能不能捕获到异常。
好的,值得尝试
  • 打赏
  • 举报
回复
你把每个可能的位置都标注一下。用个FLAG,然后在异常的时候弹出 来就可以知道错误在那一行了。成功了再去掉这些测试代码。
choueny 2020-09-11
  • 打赏
  • 举报
回复
可以把这段放到主线程里,然后试试使用try能不能捕获到异常。
IT_study001 2020-09-11
  • 打赏
  • 举报
回复
引用 6 楼 datafansbj 的回复:
应该是出异常了,子线程的异常需要在子线程里使用 try 来捕获,这种异常不会传递到主线程。
如果是异常的话,就算捕获成功怎么完成下一步需要执行的代码呢。还是说避免异常的出现~
datafansbj 2020-09-11
  • 打赏
  • 举报
回复
应该是出异常了,子线程的异常需要在子线程里使用 try 来捕获,这种异常不会传递到主线程。
IT_study001 2020-09-11
  • 打赏
  • 举报
回复
引用 1 楼 晨易夕 的回复:
线程只有正常结束和异常终止,即使你主动去终止线程的时候,往往都是使线程引发ThreadAbortException异常而终止。 要讨论你的线程为何意外停止,最好还是贴上你的代码。
private void DutyTime()
        {
            
            while (true)
            {
                
                time = DateTime.Now.ToString("HH:mm");
                //左边为定时分析。右边为手动分析IsAuto为传递过来为True的数值
                if (((time =="09:00" ||time == "21:00") && isStart == false)||(IsAuto == true && isStart == false))
                {
                    //MessageBox.Show("开始分析");
                    isStart = true;
                    if (IsAuto != true) //如果不是手动分析,则获取当前时间段来分析
                    {
                        analyMonth =  DateTime.Now;
                    }
                    if (Name == "一键分析")
                    {
                        Analysis_XX1(analyMonth,0);

                        Analysis_XX2(analyMonth,0);

                        Analysis_XX(analyMonth,0);

                    }
                    else if(Name == "XX")
                    {
                        Analysis_XX(analyMonth,0);           
                    }
                    else if (Name == "XX1")
                    {
                        Analysis_XX1(analyMonth,0);
                    }
                    else if (Name == "XX2")
                    {
                        Analysis_XX2(analyMonth,0);

                    }
                    

                    
                    if (IsAuto ==true)
                    {
                        IsAuto = false;
                        Name = "一键分析";
                    }
                    isStart = false;
                }
                //GC.Collect();
                
                Thread.Sleep(1000);
            }
        }
贴上部分代码。开的一个子线程作一个循环定时操作。执行其中一个方法
IT_study001 2020-09-11
  • 打赏
  • 举报
回复
我开了个子线程去执行一个方法,但是执行到一半的时候 就不会继续进行下一段的代码。 一开始我以为线程关闭了。再点击运行显示线程正在执行代码。去翻阅资料的时候 猜测是不是线程终止影响的。现在判断的原因也是个猜测
晨易夕 2020-09-11
  • 打赏
  • 举报
回复
线程只有正常结束和异常终止,即使你主动去终止线程的时候,往往都是使线程引发ThreadAbortException异常而终止。 要讨论你的线程为何意外停止,最好还是贴上你的代码。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧