我正在使用 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/