我试图使用WPF控件在F#中编写一个打印表单--并且是在异步工作流中完成的。由于我是新手,所以我不知道如何将由F#异步块使用的wpf控件放在STA线程上,而不阻塞主线程。我有很多打印的表格,不想阻塞主线。如何为F#异步工作流创建STA线程?提前感谢您的帮助。
t9aqgxwy1#
在纯WPF中,我不认为您有STA --这个概念来自COM模型。您所拥有的是一个特定的UI线程,它必须用于与UI进行通信。要获得该线程,您可以在确定您在UI线程上时使用SynchronizationContext.Current属性(例如,在事件处理程序中)。注意:如果SynchronizationContext.Current为null,则您将在线程池中运行,而不是在UI线程上运行。如果随后将该SynchronizationContext对象传递到async {}代码中,则应该能够通过调用Async.SwitchToContext重新加入UI线程
SynchronizationContext.Current
null
SynchronizationContext
async {}
Async.SwitchToContext
1条答案
按热度按时间t9aqgxwy1#
在纯WPF中,我不认为您有STA --这个概念来自COM模型。您所拥有的是一个特定的UI线程,它必须用于与UI进行通信。要获得该线程,您可以在确定您在UI线程上时使用
SynchronizationContext.Current
属性(例如,在事件处理程序中)。注意:如果SynchronizationContext.Current
为null
,则您将在线程池中运行,而不是在UI线程上运行。如果随后将该
SynchronizationContext
对象传递到async {}
代码中,则应该能够通过调用Async.SwitchToContext
重新加入UI线程