关于C#消息机制,请指教
C#的接收消息是在WndProc中,这个是程序运行就自动进入,这样类似查询方式的处理非常占用CPU,有不有其他办法?也就是我想仅仅在我SendMessage时才进入消息接收函数可以不?小弟刚接触C#不久哈,请大神们指教!
以前我BCB下是这样实现的:
自定义消息处理函数:receive_data
在头文件中定义如下:
define WM_SAMPLE_DATA_MSG WM_USER+200
private: MESSAGE void__fastcall receive_data(TMessage &Message)
public: BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_SAMPLE_DATA_MSG,TMessage,receive_data)
END_MESSAGE_MAP(TForm)
定义完成后,我就可以在主程序中调用接收函数MESSAGE void__fastcall receive_data(TMessage &Message)了,而且仅仅当我SendMessage(..)时才会触发接收函数。
请问在C#下怎么实现?
c#
user
消息
------解决方案--------------------lz的WM_SAMPLE_DATA_MSG是个自定义消息,只有发送WM_SAMPLE_DATA_MSG这个消息,MessageHandler才会被执行。
Windorm中可以用Event或者Delegate
参考:
winform 事件处理机制
http://blog.csdn.net/ignite_spark/article/details/5366678
------解决方案--------------------看看这篇文章:
Asynchronous Nature of Delegates
http://www.c-sharpcorner.com/uploadfile/Ashush/asynchronous-nature-of-delegates/
------解决方案--------------------什么乱七八糟的。我说的很清楚,当没有新的消息需要处理的时候,UI线程是阻塞的,不消耗资源。
在Win32 API层面,调用一个叫GetMessage()的函数,如果没有新的消息到达,这个函数就一直不会返回。
------解决方案--------------------
用ref 或者out .. 真汗,你vc这么熟悉干嘛用c# 。。。
------解决方案--------------------Databuf = null;
GC.Collect();