C# 挂起wpf应用程序中的线程
我有一个WPF应用程序,其中我有这样一个类:C# 挂起wpf应用程序中的线程,c#,wpf,multithreading,thread-safety,threadpool,C#,Wpf,Multithreading,Thread Safety,Threadpool,我有一个WPF应用程序,其中我有这样一个类: public partial class Global : UserControl { public static List<Thread> listofthreads = new List<Thread>(); public Global() { InitializeComponent(); Thread windowThr
public partial class Global : UserControl
{
public static List<Thread> listofthreads = new List<Thread>();
public Global()
{
InitializeComponent();
Thread windowThread = new Thread(delegate() { verifing(); });
listofthreads.Add(windowThread);
windowThread.Start();
}
public void verifing()
{
if (Global2.Pat_pathregfile.Length > 5 && Global2.Pat_pathcalibfile.Length > 5) {
if (utilisation.Dispatcher.CheckAccess())
{
utilisation.Visibility = Visibility.Visible;
}
else
{
utilisation.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
utilisation.Visibility = Visibility.Visible;
}));
}
foreach (Thread t in listofthreads) {
try
{
t.Suspend();
}
catch { }
}
}
else {
if (utilisation.Dispatcher.CheckAccess())
{
utilisation.Visibility = Visibility.Hidden;
}
else
{
utilisation.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
{
utilisation.Visibility = Visibility.Hidden;
}));
}
Thread windowThread = new Thread(delegate() { verifing(); });
windowThread.Start();
listofthreads.Add(windowThread);
}
}
}
但是程序表明不建议使用方法suspend
Suspend
方法已被标记为已过时。错误状态本身:
Thread.Suspend已被弃用。请在中使用其他类
线程,如监视器、互斥体、事件和信号量
同步线程或保护资源
2) 似乎有些线程在关闭后仍在工作
窗户,为什么会这样?我怎样才能修好它
您已将所有线程作为前台线程启动,当主线程完成其执行时,该线程不会自动停止。若要在所有前台线程停止后停止所有线程,则应将线程标记为后台线程
windowThread.IsBackground = true;
3) wpf中是否存在另一种终止线程的方法
使用。然而,关闭主线程将自动停止所有后台线程(在线程上IsBackground设置为true),您不必担心杀死它们
1) 为什么?
Suspend
方法已被标记为已过时。错误状态本身:
Thread.Suspend已被弃用。请在中使用其他类
线程,如监视器、互斥体、事件和信号量
同步线程或保护资源
2) 似乎有些线程在关闭后仍在工作
窗户,为什么会这样?我怎样才能修好它
您已将所有线程作为前台线程启动,当主线程完成其执行时,该线程不会自动停止。若要在所有前台线程停止后停止所有线程,则应将线程标记为后台线程
windowThread.IsBackground = true;
3) wpf中是否存在另一种终止线程的方法
使用。然而,关闭主线程将自动停止所有后台线程(在线程上IsBackground设置为true),您不必担心杀死它们
1) 为什么?
Suspend
方法已被标记为已过时。错误状态本身:
Thread.Suspend已被弃用。请在中使用其他类
线程,如监视器、互斥体、事件和信号量
同步线程或保护资源
2) 似乎有些线程在关闭后仍在工作
窗户,为什么会这样?我怎样才能修好它
您已将所有线程作为前台线程启动,当主线程完成其执行时,该线程不会自动停止。若要在所有前台线程停止后停止所有线程,则应将线程标记为后台线程
windowThread.IsBackground = true;
3) wpf中是否存在另一种终止线程的方法
使用。然而,关闭主线程将自动停止所有后台线程(在线程上IsBackground设置为true),您不必担心杀死它们
1) 为什么?
Suspend
方法已被标记为已过时。错误状态本身:
Thread.Suspend已被弃用。请在中使用其他类
线程,如监视器、互斥体、事件和信号量
同步线程或保护资源
2) 似乎有些线程在关闭后仍在工作
窗户,为什么会这样?我怎样才能修好它
您已将所有线程作为前台线程启动,当主线程完成其执行时,该线程不会自动停止。若要在所有前台线程停止后停止所有线程,则应将线程标记为后台线程
windowThread.IsBackground = true;
3) wpf中是否存在另一种终止线程的方法
使用。但是,关闭主线程将自动停止所有后台线程(在线程上IsBackground设置为true),您不必担心会杀死它们。您想做什么?您创建线程只是为了检查某些条件?当条件为true时,您将更改可见性并阻止所有线程(!)进一步执行。当条件为非真时,您将创建另一个执行相同操作的线程。为什么要挂起所有线程(包括活动线程),而不是让它终止?如果您想定期检查某个条件,请改用计时器或等待事件
作为旁注:您的foreach循环最终将抛出invalidoOperationException
,因为您在更改集合时没有锁定
然后,不要试图杀死线程。使用标志或信号代替。任何终止线程的尝试都是a)糟糕的设计,b)容易出错和出现意外行为 你想做什么?您创建线程只是为了检查某些条件?当条件为true时,您将更改可见性并阻止所有线程(!)进一步执行。当条件为非真时,您将创建另一个执行相同操作的线程。为什么要挂起所有线程(包括活动线程),而不是让它终止?如果您想定期检查某个条件,请改用计时器或等待事件
作为旁注:您的foreach循环最终将抛出invalidoOperationException
,因为您在更改集合时没有锁定
然后,不要试图杀死线程。使用标志或信号代替。任何终止线程的尝试都是a)糟糕的设计,b)容易出错和出现意外行为 你想做什么?您创建线程只是为了检查某些条件?当病情恶化时