gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:43:34 25 4
gpt4 key购买 nike

我的程序的客户端和服务器都标记为 STAThread,我在调试器中验证了我从中进行调用的线程标记为 STA。在服务器端,我在设置服务器时验证了程序本身是否标记为 STA。然而,实际的 .Net 远程调用是通过标记为 MTA 的线程完成的。无论如何,当我的服务方法访问需要 STA 线程的资源时,是否可以更改此行为。

最佳答案

Remoting 无法做到这一点,对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com