如我开启了5个线程(不用定时器),这5个线程必须要24小时不停的运行,以下是我的代码:
if (th == null)
{
th = new Thread(new ThreadStart(Run));
th.Start();
}
else if (th.ThreadState == System.Threading.ThreadState.Unstarted)
{
th.Start();
}
else if (th.ThreadState == System.Threading.ThreadState.Stopped)
{
th = new Thread(new ThreadStart(Run));
th.Start();
}
else if (th.ThreadState == System.Threading.ThreadState.Aborted)
{
th = new Thread(new ThreadStart(Run));
th.Start();
}
这个代码运行可能能行一直运行,但是运行几个小时后,我监控任务管理器,线程在一个一个的增加,也就是这一段代码可能方法一直在进if,有什么办法避免这种情况,无论线程里面是否异常,都要执行(就是定时器的功能一样)
我就是用了whiletrue,但是不知道为什么,可能异常的原因,最终他会跳出循环,所以我才想判断一下,要确保无限循环
追答你没在while里用try catch捕捉错误么,在catch里加个日志写入看看倒底啥错误
追问我知道错误,但是不代表以后不出现其他错误,所以说不管怎样,错了也好,线程必须要开着
c# 怎么检测线程状态,线程无论以什么状态停止,都必须开启?
不是太明白你的需求,你线程如果不需要停止,在每个线程里都用while(true)之类的死循环就可以了,循环中如果需要停止一段时间可以用sleep之类的来停止一段时间。
查看当前线程运行在哪个核上c#
1、判断线程是否处于取消状态(MyThread.ThreadState&ThreadState.AbortRequested)。=0。2、判断线程是否处于运行状态(MyThread.ThreadState==ThreadState.Running)。
c# .net 怎么终止或暂停 处于 running 状态的线程?
终止线程可以用Thread.Abort()方法,但是最好写个标志位循环去关闭,然后判断状态为关闭了在跳出循环,直接一个Thread.Abort()不一定都绝对关闭或终止线程,这一点微软都不敢保证!
c# 怎么判断线程的ThreadState
if和else if判断的对象都不是同一个,你的if里面判断条件是线程thread,thread的状态满足了条件就会进入第一个
C# 停止线程的问题
你的代码逻辑我是这样理解的,遍历N个线程,如果线程状态不是stopped,就终止该线程 那你可以这样:private void Stop_Click(object sender, EventArgs e){ foreach (Thread threada in thread){ \/\/如果线程状态不为stopped,执行if里的业务逻辑代码 if (threada.ThreadState != ThreadState.Stopped){...
执行一个C#线程,怎么判断线程执行完毕?
给一个全局ManuallResetEvent对象a,在线程执行的函数的最后一行加上a.Set()然后用WaitHandle的WaitOne等待
c#中如何让一个按钮去启动一个线程,点另外个按钮就能停止线程?
这个需要用到后台线程执行,否则一运行主线程就卡住了:public partial class Form1 : Form { \/\/ 打印放在后台执行 BackgroundWorker m_Worker;\/\/ 用一个标记来看是否请求停止执行 bool m_NeedRun = false;public Form1(){ InitializeComponent();m_Worker = new BackgroundWorker();m_Worker.Do...
c#怎么可以让一个窗口暂停,而其它窗口正常运行?
②暂停窗口内所有正在运行的控件,timer.Enable都设为false,音乐播放器之类的要静音。③设置一个全局变量【暂停中】运行的循环函数检测到【暂停中】,就记录当前状态并退出循环,等恢复时,读取原状态,继续循环,④总之把窗口内部一切功能都暂停。暂时就想到这么多,有问题可追问。
C#防止怎么让电脑进入待机状态
首先,了解SetThreadExecutionState函数。此函数允许在Windows操作系统中控制线程的执行状态。通过传入特定值,可以阻止系统在执行某个线程时进入休眠状态。例如,使用SETEXECUTIONSTATE_FLAG_DONT_HIBERNATE参数,可以阻止系统在执行特定线程时进入休眠或hibernate状态。其次,消息WM_POWERBROADCAST可以帮助检测和响应...
C#AutoResetEvent和ManualResetEvent的区别
若将代码片段1中的true改为false,则会立即输出“t1 end”。在终止状态中,无论调用WaitOne()方法,工作线程都不会被阻滞。(注:ManualResetEvent同样适用)二:AutoResetEvent与ManualResetEvent的差异 接下来,让我们深入理解AutoResetEvent与ManualResetEvent的差异。以代码段2与代码段3为例。代码段2在3...