我的程序的客户端和服务器都标记为 STAThread,并且我在调试器中验证了我进行调用的线程被标记为 STA。在服务器端,我验证了设置服务器时程序本身被标记为STA。然而,实际的 .Net 远程调用是通过标记为 MTA 的线程完成的。当我的服务方法访问需要 STA 线程的资源时,是否可以更改此行为。
最佳答案
远程处理无法做到这一点,对 STA 线程的硬性要求是它还泵送消息循环。您确实必须创建自己的线程,在启动之前使用 Thread.SetApartmentState() 将其切换到 STA。并使用 Application.Run() 和虚拟表单来启动消息循环。然后,您可以使用 Control.BeginInvoke() 将远程处理线程的调用编码到这个新线程。
请注意,由于您已经为服务器启动了一个 STA 线程,因此该线程可以很好地完成这项工作。将其粘贴到您的表单类中以防止其可见:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
this.CreateHandle();
value = false;
}
base.SetVisibleCore(value);
}
关于c# - 如何设置服务 .Net Remoting 调用的线程的单元状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3884157/