gpt4 book ai didi

c# - WCF:从服务内部访问 Windows 窗体

转载 作者:行者123 更新时间:2023-11-30 16:35:59 25 4
gpt4 key购买 nike

我怎样才能实现这种情况?

我在 Windows 窗体中托管了一个 WCF 服务,每当该服务的客户端调用服务上的方法时,我希望该服务能够将消息写入 Windows 窗体上的文本框。

我在考虑让我的 WCF 服务成为单例,使用表单实现的接口(interface)将我的表单传递到服务中,然后存储该实例。然后当客户端调用该服务时,我可以简单地使用表单实例写入文本框。

我当然不能这样做,因为我不能将表单传递到 WCF 服务中。

有什么想法或代码示例吗?

最佳答案

服务实例和您的 Windows 窗体在两个单独的线程中运行,您不能只从服务实例更新主 UI 线程上的 UI 元素。

您需要使用同步上下文和委托(delegate),以便从服务线程正确安全地更新您的 UI。

参见 this CodeProject文章 - 大约在中间,作者谈到了“UI 线程问题”。这基本上就是您需要做的:

SendOrPostCallback callback = 
delegate (object state)
{
yourListBox.Add(state.ToString());
};

_uiSyncContext.Post(callback, guestName);

有关该主题的全面介绍,请参阅 Juval Lowy 的 MSDN 文章“WCF Synchronization Contexts”。

在 Winforms 应用程序中托管 WCF 服务对我来说似乎是一个相当糟糕的主意 - 首先是因为所有这些线程问题,其次,它只有在 winforms 应用程序启动时才能工作。不能将 WCF 服务放入控制台应用程序或 Windows NT 服务,然后创建一个基于 Winforms 的监控应用程序,它可能会检查例如用于传入请求消息或其他内容的数据库表?

马克

关于c# - WCF:从服务内部访问 Windows 窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1372191/

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