2011-01-14 90 views
2

我正在使用VS2008在C#中写入一个DLL。从C#中的DLL生成自定义事件#

该DLL用作应用程序和串行端口之间的接口。应用程序以特定格式(或它遵循标准协议)向该DLL发送数据。 DLL将其转换为串行传输并通过串行端口传输。在其他PC(运行方式类似于客户端)并通过串行连接运行的相同应用程序接收此数据。相同的DLL获取这些数据。现在它转换回标准协议并将其放入缓冲区,以便应用程序可以读取它。

发送数据没有问题,但在接收时,我使用了DLL中的串行数据接收事件,以便它可以获取数据并对其进行处理。我的问题是我该如何向应用程序表明数据已被处理并且可用于它,并且它可以读取缓冲区?

我可以在DLL中使用SetEvents,可以说,它是用来表示应用程序使用DL​​L

+0

是DLL一个.NET类库或本机库? – 2011-01-14 07:28:09

回答

1

您应该创建一个事件,触发它,你在处理接收到的事件串行数据后的数据。如果需要,您可以使用自定义事件参数传递数据。

这是你的DLL的代码:实现你应该设置在你的应用程序中的事件处理程序代码后

public delegate void dllFinishedHandler(object sender, object tag); 
    public event dllFinishedHandler DllFinished; 
    protected virtual void OnDllFinished(object e) 
    { 
     if (DllFinished!= null) 
      DllFinished(this, e); 
    } 

下面的代码将对象传递给应用程序。您可以使用SerialDataReceivedEventArgs或自定义事件处理程序也可能是这样的:

public delegate void dllFinishedHandler(object sender, SerialDataReceivedEventArgs eventArgs); 
    public event dllFinishedHandler DllFinished; 
    protected virtual void OnDllFinished(SerialDataReceivedEventArgs e) 
    { 
     if (DllFinished!= null) 
      DllFinished(this, e); 
    } 
从EventArgs的继承

,并在代码中使用它下面,而不是SerialDataReceivedEventArgs的:

public class DllEventArgs : EventArgs 
{ 
    private byte[] buffer; 

    public byte[] Buffer 
    { 
     get 
     { 
      return buffer; 
     } 
    } 

    public DllEventArgs(byte[] buff) 
    { 
     buffer = buff; 
    } 
} 

那么你的应用程序可以到达缓冲区(我直接从事件中猜测它的byte [])。

0

你知道什么时候处理数据。如果是的话,

if(Processed != null) 
Processed(this, new EventArgs()); 

类下

public event EventHandler Processed 

Decalre事件您也可以通过自定义事件参数,并使用通用的事件处理