0

我们有以下情况:

一个 ATL COM 服务器(进程外,EXE),它承载带有连接点的 COM 对象。这些对象“存在于”单个 (exe) 进程中,它们触发事件(使用 Fire_* 方法)以便其他进程(例如:不同进程中的 .NET GUI 应用程序,ATL EXE 服务器的“客户端”) ) 可以捕获这些事件并做出相应的反应。

目前,我们有一个 .NET 应用程序(Windows 窗体),它是 ATL 服务器的客户端。启动(双击)时,它会将一些委托(事件处理程序)附加到 ATL 服务器中托管的 COM 对象事件(连接点)。每次从 ATL 服务器触发事件​​时,.NET 客户端通常会在主窗口中显示一些信息或打开一个新窗口供用户交互。此解决方案基于以下文章: http: //www.codeproject.com/KB/COM/cominterop.aspx#ConnectionPoints(COM-.NET 事件处理)。

上述场景假定用户在触发事件之前实际上已经双击了 .NET 客户端 (exe),即 - 显式打开了 .NET 应用程序。如果 .NET 客户端未打开(实例化),则触发的事件“丢失” - 没有客户端处理它。

我们想要以下情况:

当从 ATL 服务器触发事件​​时,应立即出现(弹出)窗口供用户交互(例如:填写电子邮件文本框并按“确定”),而无需启动 .NET客户在一切之前明确。这样,用户将收到有关每个事件的通知,并可以交互地对其做出反应。

我们查看了将 .NET 客户端应用程序作为 ATL 服务器内的 dll 托管的选项,但我读过从 ATL EXE 显示 GUI 是一个很大的“不可以”(任何 GUI,而不仅仅是 .NET GUI WinForms 或 WPF)。

当服务器和客户端在两个不同的进程中运行(并且“客户端”尚未运行)时,这可能吗?有没有人遇到同样的问题?是否已解决(以及如何...)?

谢谢 ;-)

暗里

有解决方案吗?

4

1 回答 1

1

You can't make this work the way you describe. If there is nobody listening to the event then there is no way to respond to it. Trivially solve your problem by starting the .NET app with a shortcut in the Startup folder so it always runs while a user is logged-in. You don't have to create a window until you get the notification from the server. Stealing the focus away isn't going to work btw so you'll probably want a NotifyIcon with a balloon.

于 2011-02-08T17:03:02.123 回答