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

C# WCF双工代理回调的STA线程上下文,c#,C#,我有一个在来自第三方的沙箱中的STA线程下运行的程序集,在这个线程中,我创建了一个需要在原始STA线程上执行方法的双工WCF客户端 当前实现工作正常,在双工回调中,我获得STA线程的同步上下文,如下所示,并使用它发回STA线程: private readonly SynchronizationContext _syncContext = AsyncOperationManager.SynchronizationContext; 这一切都在STA线程中初始化的WinForm中运行,很好。。。但是

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

当前实现工作正常,在双工回调中,我获得STA线程的同步上下文,如下所示,并使用它发回STA线程:

private readonly SynchronizationContext _syncContext = AsyncOperationManager.SynchronizationContext;
这一切都在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线程中保持双工回调方法的执行吗?

您可以使用
Dispatcher
类吗?另外,请将您的问题包括在内,该问题可以由其他人编译和测试,它显示了在使用winforms时如何获得正确的线程id,以及在不使用winforms时如何获得错误的线程id。一个最小的示例非常大,它必须包括客户端和服务器组件。我同意大多数问题都应该有基本的例子来帮助调查,但不幸的是,在这里不容易做到。我必须测试将回调方法调用分派给ManagedThreadId 1,但主要问题是我真的不确定为什么在winform和标准类中运行它会有如此大的差异。winform中threadID的唯一更改是在接收到来自服务器的调用时,我将其发回threadID 1的同步上下文。在标准类中,甚至WCF客户端实例都有一个单独的threadID,然后是回调的单独id,然后是通过发回执行线程同步上下文执行的方法的id。这就像winform将所有东西绑定到UI线程…我可能需要在标准类中复制它,但我不确定如何复制,有什么想法吗?