WCF双工代理回调的STA线程上下文

时间:2019-03-15 20:34:20

标签: c#

我有一个程序集,该程序集在第三方的沙箱中的STA线程下运行,在该线程中,我创建了一个双工WCF客户端,该客户端需要在原始STA线程上执行方法。

当前的实现工作正常,在Duplex回调中,我按如下方式获取STA线程的同步上下文,并将其用于发回STA线程:

expect(page).to have_selector('.modal.in')
expect(page).to have_no_selector('.modal.in')

所有这些都在STA线程中初始化的WinForm中运行,太好了……但是我需要移动WCF双工代理,以便它可以在主STA线程中的类实例下运行。当我删除winform时,我最终从上述SynchronizationContext中获得了一个全新的线程。

要澄清:

Winforms:

  • 在STA线程上启动WCF双工代理-ManagedThreadId = 1
  • 从服务器接收双工回调-ManagedThreadId = 5
  • 使用AsyncOperationManager.SynchronizationContext发布到回调事件方法-ManagedThreadId = 1

没有WinForm(类实例):-

  • 在STA线程上启动WCF双工代理-ManagedThreadId = 1
  • 从服务器接收双工回调-ManagedThreadId = 6
  • 使用AsyncOperationManager.SynchronizationContext发布到回调事件方法-ManagedThreadId = 11

在线程11而不是1上执行意味着我的方法无法在沙箱中正确执行,除了在Winform下运行之外,变量之间的代码没有区别。有谁知道我如何在不使用winform的情况下保持STA主线程中双工回调方法的执行?

0 个答案:

没有答案