private UnReader Reader;
private UnReader.CardReadHandler CardHandler;
private void OnCardReadEvent(string card)
{
MessageBox.Show(card, "Message");
//这边要怎么实现,通知窗体或者另一个Thread
}
主程序,调用别人的DLL,别人的DLL以Event方式通知。(别人的DLL应该是一个线程,有消息就用Event方式通知)
现在主程序收到Event时,想通知窗体更新数据或者通知另一个Thread处理数据
6 个解决方案
#1
用事件
//窗体A
FormB b =new FormB();
b.ReceiveData += ReceiveData;
private void ReceiveData(string card)
{
MessageBox.Show(card);
}
//窗体B
public void delegate ReceiveDataHandler(string card);
public ReceiveDataHandler ReceiveData;
private void OnCardReadEvent(string card)
{
MessageBox.Show(card, "Message");
//这边要怎么实现,通知窗体或者另一个Thread
if(ReceiveData!=null)
{
ReceiveData(card);
}
}
#3
直接让那个窗体或者线程去挂接事件处理函数即可。
#4
但是如果有两个窗体,都挂事件这样不会有问题?
#5
要看你的代码逻辑。事件本身就是支持挂接多个函数的。
#6
知道原因了,是DLL里的事件是要Open RS232后,才Start Thread, 有数据才用Event通知
谢谢!
#1
用事件
//窗体A
FormB b =new FormB();
b.ReceiveData += ReceiveData;
private void ReceiveData(string card)
{
MessageBox.Show(card);
}
//窗体B
public void delegate ReceiveDataHandler(string card);
public ReceiveDataHandler ReceiveData;
private void OnCardReadEvent(string card)
{
MessageBox.Show(card, "Message");
//这边要怎么实现,通知窗体或者另一个Thread
if(ReceiveData!=null)
{
ReceiveData(card);
}
}
#2
#3
直接让那个窗体或者线程去挂接事件处理函数即可。
#4
但是如果有两个窗体,都挂事件这样不会有问题?
#5
要看你的代码逻辑。事件本身就是支持挂接多个函数的。
#6
知道原因了,是DLL里的事件是要Open RS232后,才Start Thread, 有数据才用Event通知
谢谢!