共同讨论.net的消息机制
1:windows 消息机制 sendmessage 和 postmessage的区别?2:消息机制在.net中是用 ISynchronizeInvoke 来实现的吗?为什么要那样使用?
3:消息机制使用了什么设计模式?我们如何自定义消息?
--------------------编程问答-------------------- 消息机制是windows的不是.net的,要了解这个就要撇开.net。
winsows有消息队列,postmessage只管扔到队列里面,sendmessage要等消息处理完毕。 --------------------编程问答-------------------- --------------------编程问答-------------------- ISynchronizeInvoke 是 .net 类库中用于跨线程更新 ui 元素用的
给定一个 delegate , 如果 Target 属性不为空,
并且实现了 ISynchronizeInvoke 接口,
那么我们就可以通过判断 ISynchronizeInvoke 接口上的 InvokeRequired 来判断是直接调用 delegate,
还是 需要调用接口上的 Invoke,
现在为止, .net 类库中只有 Control(winform) 实现了这个接口, 那么所有从 Control 派生的自然获得
用在线程中需要更新 ui 元素的场合. --------------------编程问答--------------------
学习了! --------------------编程问答-------------------- PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;
而SendMessage必须等待其他程序处理消息后才返回,继续执行。
PostMessage的返回值表示PostMessage函数执行是否正确;
而SendMessage的返回值表示其他程序处理消息后的返回值。
http://www.cnblogs.com/shangxijie/articles/1216995.html
http://www.cnblogs.com/sadier/articles/115808.html --------------------编程问答-------------------- 1:windows 消息机制 sendmessage 和 postmessage的区别?
SendMessage会直接发送给那个对应的窗口,然后窗口就会马上处理发送过来的消息,但是注意,对于GUI程序,你必须显式调用Invalidate和UpdateWindow,否则界面不会变化,但是其实消息已经处理了。
但是PostMessage发送的消息是放入到对应窗口的消息队列中,然后就直接返回,不管消息如何执行而消息队列中的消息是按FIFO的次序执行的,这样就不能马上表现出来了,具体何时执行,要看这个消息队列中的消息个数了。
2:消息机制在.net中是用 ISynchronizeInvoke 来实现的吗?为什么要那样使用?
C#的消息处理方法
3:消息机制使用了什么设计模式?我们如何自定义消息?
同上 --------------------编程问答--------------------
UP
补充:.NET技术 , .NET Framework