我有一个连接到WCF的winForm应用程序,使用带有自定义接口的双工通道。
回调功能正常,但尝试从回拨事件中引发事件让我陷入困境。
在我用来连接到WCF服务的支持类上,我使用单个事件来引发消息,然后在主应用程序表单的输出文本框控件中显示。
支持类中的 OnEvent 已定义:
protected virtual void OnMsgEvent(SurfaceArgs e)
{
MsgEventEventHandler temp = MsgEvent;
if (temp != null)
{
temp(this,e);
}
}
定义了从WCF回调实现的事件:
public void OnEvent4(string sValue)
{
OnMsgEvent(new SurfaceArgs(sValue, EventLogEntryType.Information));
}
当我从WCF事件进行调用时, null 的OnMsgEvent验证始终在以下位置处于null:
if (temp != null)
就好像从WCF引发的事件是在一个单独的线程上,我不确定如何调用它或委托它,以便我可以调用OnMsgEvent。
目前,我正在传递一个指向主窗体并调用公共方法的指针。我希望这个临时解决方案在Textbox控件上需要一个Invoke,但它没有。
解决方案可能很简单,我还没有看到它。 =)
答案 0 :(得分:0)
在研究了类似问题后,我后来发现: Using a Callback to pass an Event to a WCF Client
我注意到对链接文章中使用的Callback的引用被作为“this”对象类型传递。
初始客户端设计在创建InstanceContext时使用了Callback类的新实例。
所以不要使用: _context = new InstanceContext(new IMyCallback());
当我将其更改为时,它按照我的预期方式工作: _context = new InstanceContext(this);
支持类扩展了IMyCallback接口,因此可能通过传递“this”它满足(对象实现)的InstanceContext要求。它有效,所以我不抱怨!