日期:2014-05-17  浏览次数:20936 次

请教各路高手:提供给第三发的DLL如何主动发送数据给第三发并且得到返回值。
本帖最后由 sirius_net 于 2013-03-07 12:38:25 编辑
请教论坛的各路高手

计划C#做一个软件产品,需要开放DLL给第三方公司继续做开发。

现,我们仅提供DLL给客户,客户在引用我们的DLL后,可以调用我们的类、方法等,并得到返回值。以上是很简单的,没有什么疑问。

但,当客户程序在初始化时,就将我们的DLL实例化,而我们的DLL则开始监听我们底层硬件的变化,并主动回告给客户程序(即引用我们DLL的程序),并获取用户处理的返回结果以保存日志。

现在,如果我们不需要用户处理的返回结果,就可以用[委托、事件]的处理办法,让用户注册我们的事件,我们在事件发生时,便可通知其处理。但是事件不带返回值,所以无法传回用户的处理结果。(备注:虽然也可以在事件发生时,通知用户处理,用户在处理的时候,主动调用我们的某一个方法,来实现结果的回传,但是我们并不想采用这种方法,因为,总觉得这个方法应该不是最好的。)

所以,现请教论坛各路高手,用什么办法,既可以保证只需要我们提供DLL给客户(而不需要客户提供DLL,或者他的方法给我们),又可以让我们的DLL主动发送数据给客户程序,同时还能(比如像普通调用方法一样)得到客户程序的返回结果。

各位高手,请!
DLL?主动发送数据?第三方?返回值

------解决方案--------------------
可以定义事件参数类型
如:
public myEventArgs:EventArgs
{
    public string Result{get;set;} //返回结果
}

用户定义事件
public void yourEvent(object sender, myEventArgs e)
{
     ...
     e.Result="结果很满意";  //返回结果
}

你在dll里就能接收到e.Result

以上都是伪代码,只是思路,你可以参考一下