C# 如何在Event中收到消息,通知给窗体,或者另一个Thread

时间:2022-06-01 19:31:58
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


引用 3 楼 caozhy 的回复:
直接让那个窗体或者线程去挂接事件处理函数即可。


但是如果有两个窗体,都挂事件这样不会有问题?

#5


要看你的代码逻辑。事件本身就是支持挂接多个函数的。

#6


引用 5 楼 caozhy 的回复:
要看你的代码逻辑。事件本身就是支持挂接多个函数的。


知道原因了,是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


引用 3 楼 caozhy 的回复:
直接让那个窗体或者线程去挂接事件处理函数即可。


但是如果有两个窗体,都挂事件这样不会有问题?

#5


要看你的代码逻辑。事件本身就是支持挂接多个函数的。

#6


引用 5 楼 caozhy 的回复:
要看你的代码逻辑。事件本身就是支持挂接多个函数的。


知道原因了,是DLL里的事件是要Open RS232后,才Start Thread, 有数据才用Event通知

谢谢!