我正在开发一个库(DLL),我需要向用户提供事件(中断)作为一个带数据的方法.库的工作是在套接字上开始列出,从套接字接收数据并在一个方法中将此数据传递给用户.
图书馆:
public void start(string IP, int port)
{
// start logic...
// receives data from socket... send this data to user
}
Run Code Online (Sandbox Code Playgroud)
应用:
Library. Class a = new Library. Class();
a.start(ip, port);
// I need this method called by library automatically when it receives data...
void receivedData(string data)
{
// data which received by library....
}
Run Code Online (Sandbox Code Playgroud)
如何用库中的数据向应用程序引发事件?
提前致谢....
gra*_*noz 14
像这样在您的库中添加一个事件:
public event Action<string> OnDataReceived = null;
Run Code Online (Sandbox Code Playgroud)
然后,在应用程序中:
Library.Class a = new Library.Class();
a.OnDataReceived += receivedData;
a.start(ip, port);
Run Code Online (Sandbox Code Playgroud)
而已.
但是您可能希望使用约定编写事件,我建议您开始使用它,因为.NET正在使用事件,因此每当您遇到该约定时,您就会知道它的事件.所以,如果我稍微重构你的代码,它应该是这样的:
在您的类库中:
//...
public class YourEventArgs : EventArgs
{
public string Data { get; set; }
}
//...
public event EventHandler DataReceived = null;
...
protected override OnDataReceived(object sender, YourEventArgs e)
{
if(DataReceived != null)
{
DataReceived(this, new YourEventArgs { Data = "data to pass" });
}
}
Run Code Online (Sandbox Code Playgroud)
当你的类库想要启动事件时,它应该调用OnDataReceived,它负责检查有人正在监听并构造适当的EventArgs以便将数据传递给监听器.
在应用程序中,您应该更改方法签名:
Library.Class a = new Library.Class();
a.DataReceived += ReceivedData;
a.start(ip, port);
//...
void ReceivedData(object sender, YourEventArgs e)
{
string data = e.Data;
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6368 次 |
| 最近记录: |