日期:2014-05-17  浏览次数:20995 次

关于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()的函数,如果没有新的消息到达,这个函数就一直不会返回。
------解决方案--------------------
引用:
引用:什么乱七八糟的。我说的很清楚,当没有新的消息需要处理的时候,UI线程是阻塞的,不消耗资源。

在Win32 API层面,调用一个叫GetMessage()的函数,如果没有新的消息到达,这个函数就一直不会返回。哦,非常感谢版主帮忙,我明白了,我程序里面消耗时间主要是在画图处理方面,也就是发消息进行画图处理时,线程被阻塞了貌似,所以感……


用ref 或者out .. 真汗,你vc这么熟悉干嘛用c# 。。。
------解决方案--------------------
Databuf = null;
GC.Collect();