C# 从C中的DLL生成自定义事件#

C# 从C中的DLL生成自定义事件#,c#,events,dll,C#,Events,Dll,我正在用VS2008用C#编写一个DLL 此DLL用作应用程序和串行端口之间的接口。应用程序以特定格式(或遵循标准协议)将数据发送到此DLL。DLL将其转换为串行传输,并通过串行端口进行传输。在另一台PC上运行并通过串行连接的同一应用程序(意味着像客户端一样运行)接收此数据。相同的DLL获取此数据。现在,它转换回标准协议,并将其放在一个buff中,以便应用程序可以读取它 发送数据没有问题,但在接收时,我在DLL中使用了串行数据接收事件,以便它可以获取数据并进行处理。我的问题是,我如何向应用程序指

我正在用VS2008用C#编写一个DLL

此DLL用作应用程序和串行端口之间的接口。应用程序以特定格式(或遵循标准协议)将数据发送到此DLL。DLL将其转换为串行传输,并通过串行端口进行传输。在另一台PC上运行并通过串行连接的同一应用程序(意味着像客户端一样运行)接收此数据。相同的DLL获取此数据。现在,它转换回标准协议,并将其放在一个buff中,以便应用程序可以读取它

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


我可以在DLL中使用
SetEvents
吗?它可以用来指示使用该DLL的应用程序吗?您应该创建一个事件,并在处理串行数据接收事件中的数据后触发它。如果需要,可以使用自定义事件参数传递数据

这是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;
    }
}

然后你的应用程序就可以到达缓冲区(我猜它的字节[]直接来自事件)。

你知道什么时候处理数据吗。如果是

if(Processed != null)
 Processed(this, new EventArgs());
类中的十重事件作为

public event EventHandler Processed

您还可以传递自定义事件参数并使用泛型EventHandler

DLL是.NET类库还是本机库?@Jon Skeet它是.NET类库。