c# - 如何设置服务 .Net Remoting 调用的线程的单元状态?

标签 c# multithreading remoting

我的程序的客户端和服务器都标记为 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/

相关文章:

java - 线程消耗的内存

c# - 如何取消线程?

c# - 如何使用 TcpChannel 配置对远程服务器的并发请求限制

c# - 远程查看 IP 端口状态

c# - 无法启动 xxx.exe。先前对应用程序进行概要分析的尝试未成功完成。请重新启动应用程序

c# - "multi-threadedly"在 async/await 模式下实际上执行了什么代码?

c# - 表单提交后清除(重置)表单字段(数据)

java - 如何用RMI实现轮询机制?

C# 自动检测代理设置

c# - 在滚动查看器中保持位置