C# Windows 8应用商店应用程序不支持System.Threading.Thread

C# Windows 8应用商店应用程序不支持System.Threading.Thread,c#,multithreading,windows-store-apps,C#,Multithreading,Windows Store Apps,Windows 8应用商店应用不再支持线程: 我在类库中创建了一个线程: protected static Thread m_thread = null; 然后在其中一个函数中: m_thread = new Thread(new ParameterizedThreadStart(RunDetection)); m_thread.Start(Something); 我还需要中止该函数: m_thread.Abort(); 如何在WIN8应用商店应用程序中执行此操作?您可以在线程池上运行线程

Windows 8应用商店应用不再支持线程:

我在类库中创建了一个线程:

protected static Thread m_thread = null;
然后在其中一个函数中:

m_thread = new Thread(new ParameterizedThreadStart(RunDetection));
m_thread.Start(Something);
我还需要中止该函数:

m_thread.Abort();

如何在WIN8应用商店应用程序中执行此操作?

您可以在线程池上运行线程过程


中止线程从来都不是一个可行的选择,因为它可能会挂起整个进程(放弃锁,不一致的全局状态)。

手动创建线程通常是一种不好的做法。您应该真正深入了解多线程以获得优势。考虑使用:

ThreadPool.QueueUserWorkItem(=>{RunDetection();});

此外,尽可能使用异步方法。例如,
SomeActionAsync
开始度量操作
,等等。如果类未实现异步方法,则使用
线程池
运行同步方法

在任何类型的环境中,您都不应该中止线程。Windows应用商店应用程序对几乎所有I/O或网络绑定任务都强制执行异步API时,对
System.Threading
名称空间的访问已不复存在。现在,线程池线程(通过TPL或
Threadpool
类,该类已在
Windows.System.Threading
命名空间中引入)是将工作异步排队的唯一方法,而不必在主应用程序线程上运行。“通常是错误的做法”-不同意;仅仅因为你需要对某些东西有很好的理解并不意味着使用它是一种不好的做法。这就是为什么我写“通常”,而不是“总是”。在90%的情况下,直接使用线程至少不如使用其他异步技术有效。如果您需要使用I/O-请使用支持I/O完成端口的异步方法,如果您需要异步运行一些小操作-请使用ThreadPool,如果您需要运行一些长操作-请使用BackgroundWorker,如果您需要进行一些繁重的计算,请使用
任务并行库
,它将涉及所有CPU核心。您必须有真正特定的任务才能直接使用线程。