Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Multithreading Silverlight线程池_Multithreading_Silverlight_Threadpool - Fatal编程技术网

Multithreading Silverlight线程池

Multithreading Silverlight线程池,multithreading,silverlight,threadpool,Multithreading,Silverlight,Threadpool,我有一个关于Silverlight中线程的问题。我主要来自winForms背景,通常使用以下包装器类来执行线程: 它在做窗口开发时很有用,但我不能在Silverlight中使用它。原因是ExecutionContext被标记为[SecurityCritical]属性,因此无法从Silverlight调用。 Silverlight是否有类似的包装器类,或者是否有解决此问题的方法 谢谢 即使在WinForm应用程序中,我也不会使用您引用的类。它仍然使用Thread.Abort,这可能(也可能)破

我有一个关于Silverlight中线程的问题。我主要来自winForms背景,通常使用以下包装器类来执行线程:



它在做窗口开发时很有用,但我不能在Silverlight中使用它。原因是ExecutionContext被标记为[SecurityCritical]属性,因此无法从Silverlight调用。

Silverlight是否有类似的包装器类,或者是否有解决此问题的方法


谢谢

即使在WinForm应用程序中,我也不会使用您引用的类。它仍然使用
Thread.Abort
,这可能(也可能)破坏应用程序域。相反,使用任务并行库中的新机制。不过,您必须重新考虑取消工作项的整个方法。这是因为您不能再依赖于强制终止,而必须使用协作终止。优点是后者可以保证避免损坏应用程序域。

即使在WinForm应用程序中,我也不会使用您引用的类。它仍然使用
Thread.Abort
,这可能(也可能)破坏应用程序域。相反,使用任务并行库中的新机制。不过,您必须重新考虑取消工作项的整个方法。这是因为您不能再依赖于强制终止,而必须使用协作终止。优点是后者可以保证避免损坏应用程序域。

查看仅在SL5中可用的取消令牌(通过CancellationTokenSource)。它使用与MSDN mag ref中使用的机制类似的机制

这是一个很好的例子。有些,还有


祝您一切顺利,欢迎使用XAML编程:)您不会回头看的

看看仅在SL5中可用的取消令牌(通过CancellationTokenSource)。它使用与MSDN mag ref中使用的机制类似的机制

这是一个很好的例子。有些,还有


祝您一切顺利,欢迎使用XAML编程:)您不会回头看的

重写使用“任务”()或BackgroundWorker()的现有代码


我们应该使用最新的技术,这给了我们技术上的进步。

重写使用“任务”(Task)或后台工作人员(BackgroundWorker))的现有代码


我们应该使用最新的技术,这给了我们技术上的进步。

不知道新的取消机制。我得看一看。这将有助于取消一个线程,但我如何处理ExecutionContext问题?@Toad:除了因为它是您引用的包装类的一部分之外,您使用它还有其他原因吗?如果没有,我的建议是停止使用它。这就是我想要做的…我可以用什么来代替ExecutionContext.Run(item.Context,delegate{item.Callback(item.State);},null)@蟾蜍:这就是AbortableThreadPool.HandleItem中的代码。也许我没说清楚。完全停止使用
AbortableThreadPool
。不要使用MSDN文章中的任何内容。假装它从未被写过。相反,可以使用
Task.Factory.StartNew
或类似工具来获取异步执行的工作项。然后在必要时使用第三方物流取消机制停止。我不知道新的取消机制。我得看一看。这将有助于取消一个线程,但我如何处理ExecutionContext问题?@Toad:除了因为它是您引用的包装类的一部分之外,您使用它还有其他原因吗?如果没有,我的建议是停止使用它。这就是我想要做的…我可以用什么来代替ExecutionContext.Run(item.Context,delegate{item.Callback(item.State);},null)@蟾蜍:这就是AbortableThreadPool.HandleItem中的代码。也许我没说清楚。完全停止使用
AbortableThreadPool
。不要使用MSDN文章中的任何内容。假装它从未被写过。相反,可以使用
Task.Factory.StartNew
或类似工具来获取异步执行的工作项。然后在必要时使用TPL取消机制来停止它。这将有助于取消线程,但我如何处理ExecutionContext问题?见上文,Brian的评论对其进行了完美的总结-TPL不需要ExecutionContext。它不会发生在不安全的线程池操作(如UnsafeQueueUserWorkItem方法)中,这些操作不会传输压缩堆栈。无论压缩堆栈流向何处,托管主体、同步、区域设置和用户上下文也会流向何处。这将有助于取消线程,但我如何处理ExecutionContext问题?见上文,Brian的评论对其进行了完美的总结-TPL不需要ExecutionContext。它不会发生在不安全的线程池操作(如UnsafeQueueUserWorkItem方法)中,这些操作不会传输压缩堆栈。无论压缩堆栈流向何处,托管主体、同步、区域设置和用户上下文也会流向何处。从…起