c# - 在 C# 中从 DLL 生成自定义事件

标签 c# events dll

我正在使用 VS2008 在 C# 中编写 DLL。

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

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

我可以在 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);
    }

of 继承自 EventArgs,并在下面的代码中使用它来代替 SerialDataReceivedEventArgs:

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

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

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

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

关于c# - 在 C# 中从 DLL 生成自定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688808/

相关文章:

c# - 为什么错误的指针从 C# 传递到我的 native 导出方法中?

c# - 1/C# 中的大整数

c# - 将 JSON 对象反序列化为动态类型但访问属性时出现 RuntimeBinderException?

c# - 无法删除强制转换事件处理程序

vb.net - 停止在 UserControl 的特定区域引发 Click 事件

c# - 如何在类库中订阅应用程序关闭事件

c# - 如何告诉 EF 不要在 Code First 中更新引用类型属性?

c# - 将 C# 日期时间对象转换为 Excel 日期格式

C++ Win32 未处理的异常处理程序

c# - 是否可以在非托管 VC++ 应用程序中使用使用 C# 创建的 DLL?