从ATL exe服务器(COM)调用.NET GUI

我们有以下情况: 一个ATL COM服务器(out-of-proc,EXE),它承载带有连接点的COM对象。 这些对象“驻留在”单个(exe)进程中,并且它们触发事件(使用Fire_ *方法)以便其他进程(例如:不同进程中的.NET GUI应用程序,ATL EXE服务器的“客户端”) )可以捕捉这些事件并作出相应的反应。 目前,我们有一个.NET应用程序(Windows Forms),它是ATL服务器的客户端。启动(双击)时,它会将一些委托(事件处理程序)附加到ATL服务器中托管的COM对象事件(连接点)。每次从ATL服务器触发事件​​时,.NET客户端通常会在主窗口中显示一些信息,或者打开一个新窗口供用户进行交互。 此解决方案基于以下文章:http://www.codeproject.com/KB/COM/cominterop.aspx#ConnectionPoints(COM-.NET事件处理)。 上面的场景假设用户在触发事件之前实际上双击了.NET客户端(exe),即 - 明确打开.NET应用程序。如果未打开(实例化).NET客户端,则触发的事件将“丢失” - 没有客户端处理它。 我们想要以下情况: 当从ATL服务器触发事件​​时,应立即显示(弹出)窗口以供用户与之交互(例如:填写电子邮件文本框并按“确定”),而无需启动。 NET客户端显然先于一切。这样,将向用户通知每个事件并且可以以交互方式对其作出反应。 我们查看了在ATL服务器中作为dll托管.NET客户端应用程序的选项,但是我已经读到从ATL EXE显示GUI是一个很大的“NO-NO”(任何GUI,不仅仅是.NET GUI, WinForms或WPF)。 这可能是服务器&客户端在两个不同的进程中运行(“客户端”尚未运行)? 有没有人遇到同样的问题?它解决了(以及如何...)? 谢谢 ;-) 奥马里 这有解决方案吗?     
已邀请:
你不能按照你描述的方式来完成这项工作。如果没有人听取这个事件,那么就没有办法回应它。通过在Startup文件夹中使用快捷方式启动.NET应用程序来解决您的问题,以便在用户登录时始终运行。在从服务器获得通知之前,您不必创建窗口。偷走焦点不会起作用,所以你可能想要一个带气球的NotifyIcon。     

要回复问题请先登录注册