Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 挂起wpf应用程序中的线程_C#_Wpf_Multithreading_Thread Safety_Threadpool - Fatal编程技术网

C# 挂起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

我有一个WPF应用程序,其中我有这样一个类:

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

  • 为什么?
  • 似乎有些线程在关闭窗口后仍在工作,为什么会发生这种情况?我怎样才能修好它
  • wpf中是否存在另一种终止线程的方法
  • 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),您不必担心杀死它们

    1) 为什么?


    Suspend
    方法已被标记为
    已过时。错误状态本身:

    Thread.Suspend已被弃用。请在中使用其他类 线程,如监视器、互斥体、事件和信号量 同步线程或保护资源


    2) 似乎有些线程在关闭后仍在工作 窗户,为什么会这样?我怎样才能修好它

    您已将所有线程作为
    前台线程启动,当主线程完成其执行时,该线程不会自动停止。若要在所有前台线程停止后停止所有线程,则应将线程标记为
    后台线程

    windowThread.IsBackground = true;
    

    3) wpf中是否存在另一种终止线程的方法


    使用。但是,关闭主线程将自动停止所有后台线程(在线程上IsBackground设置为true),您不必担心会杀死它们。

    您想做什么?您创建线程只是为了检查某些条件?当条件为true时,您将更改可见性并阻止所有线程(!)进一步执行。当条件为非真时,您将创建另一个执行相同操作的线程。为什么要挂起所有线程(包括活动线程),而不是让它终止?如果您想定期检查某个条件,请改用计时器或等待事件

    作为旁注:您的foreach循环最终将抛出
    invalidoOperationException
    ,因为您在更改集合时没有锁定


    然后,不要试图杀死线程。使用标志或信号代替。任何终止线程的尝试都是a)糟糕的设计,b)容易出错和出现意外行为

    你想做什么?您创建线程只是为了检查某些条件?当条件为true时,您将更改可见性并阻止所有线程(!)进一步执行。当条件为非真时,您将创建另一个执行相同操作的线程。为什么要挂起所有线程(包括活动线程),而不是让它终止?如果您想定期检查某个条件,请改用计时器或等待事件

    作为旁注:您的foreach循环最终将抛出
    invalidoOperationException
    ,因为您在更改集合时没有锁定


    然后,不要试图杀死线程。使用标志或信号代替。任何终止线程的尝试都是a)糟糕的设计,b)容易出错和出现意外行为

    你想做什么?您创建线程只是为了检查某些条件?当病情恶化时