当前位置:编程学习 > C#/ASP.NET >>

共同讨论.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 元素的场合. --------------------编程问答--------------------
引用 3 楼 Dobzhansky 的回复:
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:消息机制使用了什么设计模式?我们如何自定义消息? 
同上 --------------------编程问答--------------------
引用 6 楼 Modest 的回复:
1:windows 消息机制 sendmessage 和 postmessage的区别? 
SendMessage会直接发送给那个对应的窗口,然后窗口就会马上处理发送过来的消息,但是注意,对于GUI程序,你必须显式调用Invalidate和UpdateWindow,否则界面不会变化,但是其实消息已经处理了。          
但是PostMessage发送的消息是放入到对应窗口的消息队列中,然后就直接返回,不管消息如何执行而消息队列中的消息是按FIFO的次序执行的,这样就不能马上表现出来了…

UP
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,