`
sipgreen
  • 浏览: 26620 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

C#窗口消息处理机制

    博客分类:
  • C#
 
阅读更多
2、PostMessage 是异步的,SendMessage 是同步的。

  PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。



3、如果在同一个线程内,SendMessage 发送消息时,由 USER32.DLL
模块调用目标窗口的消息处理程序,并将结果返回。SendMessage 在同一线程中发送消息并不入线程消息队列。PostMessage
发送消息时,消息要先放入线程的消息队列,然后通过消息循环分派到目标窗口(DispatchMessage)。



 如果在不同线程内,SendMessage 发送消息到目标窗口所属线程的消息队列,然后发送消息的线程在 USER32.DLL
模块内监视和等待消息处理,直到目标窗口处理完返回。SendMessage 在返回前还做了很多工作,比如,响应别的线程向它
SendMessage。Post 到别的线程时,最好用 PostThreadMessage 代替
PostMessage,PostMessage 的 hWnd 参数可以是 NULL,等效于 PostThreadMessage +
GetCurrentThreadId。Post WM_QUIT 时,应使用 PostQuitMessage 代替。



4、系统只整编(marshal)系统消息(0 到 WM_USER 之间的消息),发送用户消息(WM_USER 以上)到别的进程时,需要自己做整编。



  用 PostMessage、SendNotifyMessage、SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处理指针就已经被释放了。



5、在 Windows 2000/XP 里,每个消息队列最多只能存放 10,000 个 Post
的消息,超过的还没被处理的将不会被处理,直接丢掉。这个值可以改得更大:[HKEY_LOCAL_MACHINE/SOFTWARE/
Microsoft/Windows NT/CurrentVersion/Windows] USERPostMessageLimit,最小可以是
4000。

PostMessage只负责将消息放到消息队列中,不确定何时及是否处理

    SendMessage要等到受到消息处理的返回码(DWord类型)后才继续

    PostMessage执行后马上返回

    SendMessage必须等到消息被处理后才会返回。
分享到:
评论

相关推荐

    C#消息循环与响应机制

    而在C#中,尤其是Windows Forms应用程序,其消息处理机制有所不同但也有相似之处。 #### C#消息循环与MFC的区别与联系 1. **消息处理核心:** - MFC中,消息处理的核心是`WinProc`函数,它负责接收来自操作系统的...

    在C#种使用 消息机制

    通过以上的介绍可以看出,在C#中使用消息机制涉及到定义消息、发送消息以及处理消息等多个方面。这些知识点对于开发基于Windows的应用程序至关重要。掌握这些内容不仅能够帮助开发者更好地理解和利用Windows消息机制...

    把其它应用嵌入到C#窗口 源代码

    这个"把其它应用嵌入到C#窗口 源代码"的资源,很可能提供了实现这一功能的具体示例和代码。 首先,我们需要理解窗口宿主的概念。窗口宿主是一种机制,它允许一个窗口(通常是父窗口)承载另一个窗口(子窗口)或...

    c#已知窗口句柄获取窗口标题的方法

    在这个例子中,我们使用了"user32.dll",它是Windows系统的核心DLL之一,包含了大量用于处理窗口、消息循环等功能的API函数。 - **GetWindowText函数**:这是一个Win32 API函数,用于从指定的窗口句柄中获取窗口...

    c# 窗口抖动 源码

    7. **异常处理**:考虑到可能的错误情况,如窗口句柄无效或API调用失败,应在代码中加入适当的异常处理机制,确保程序的稳定运行。 下面是一个简单的C#窗口抖动的实现思路: 1. 首先,定义所需的Win32 API函数的C#...

    c# windows的消息参数最全

    在C#中,通过使用P/Invoke(Platform Invoke)技术,我们可以调用Windows API函数来发送或接收这些消息,从而实现更高级别的窗口管理和事件处理。 ### C#中Windows消息的处理 #### SendMessage函数 `SendMessage`...

    c# 窗口应用开发讲解PDF

    你会学习如何创建、设计和布局控件,如按钮、文本框、标签等,并掌握事件处理机制。 4. **控件与事件处理**:每个Windows Form控件都有相应的事件,如点击事件、改变事件等。理解事件驱动编程模式和如何编写事件...

    C#中父窗口和子窗口之间实现控件互操作

    总的来说,C#中父窗口和子窗口之间的控件互操作主要依赖于对象实例的引用、事件机制、属性访问以及回调方法。理解并熟练运用这些技术,可以创建出灵活且功能丰富的多窗口应用程序。在实际开发中,还要注意线程同步...

    C# 句柄截图(窗口截图)

    句柄是Windows操作系统中的一种机制,用于唯一标识系统资源,如窗口、进程、线程等。在C#中,我们可以利用P/Invoke(平台调用)技术来调用Windows API,这些API通常需要句柄作为参数,以便对特定的窗口进行操作。...

    c# 实现多窗口间线程控制

    6. **窗口通信**:在多窗口应用中,窗口间的通信可以通过各种方式实现,如事件、公共属性、依赖项属性、消息队列等。其中,`MVVM(Model-View-ViewModel)`模式是一种推荐的架构,它鼓励数据绑定和事件驱动,使得...

    C# 窗口句柄查看器

    《C# 窗口句柄查看器:深入解析与...总结,C#窗口句柄查看器是开发者工具箱中的一项实用工具,它揭示了操作系统窗口管理的底层机制。理解和运用窗口句柄,能够帮助我们更好地操控Windows系统,实现更复杂的应用场景。

    C# 屏蔽 鼠标 左键 消息 C# 屏蔽 鼠标 左键 消息

    要实现这一目标,我们需要深入理解Windows消息机制以及如何在C#中拦截和处理这些消息。以下就是关于“C#屏蔽鼠标左键消息”的详细知识点: 1. Windows消息系统:Windows操作系统使用消息队列来处理应用程序中的事件...

    C# 等待窗口小实例

    总的来说,C#中的等待窗口是通过多线程和适当的UI同步机制来实现的,它可以提升用户体验,避免程序在执行长时间操作时变得无响应。通过学习和实践这个小实例,你将能更好地理解和掌握C#中的并发编程和UI交互技巧。

    c#跳转窗口取值

    首先,让我们理解窗口间的通信机制。在WinForms中,有两种主要的方式进行窗口间的传值:通过构造函数传递参数和使用公共属性或方法。 1. **通过构造函数传递参数**: 当打开新窗口时,可以在创建新实例时将值作为...

    C#实现窗口拖动

    本文将详细解析如何通过C#代码实现窗口的拖动功能,包括必要的P/Invoke调用、常量定义以及事件处理机制。 ### 一、理解窗口拖动的原理 窗口拖动主要依赖于Windows API函数`ReleaseCapture()`和`SendMessage()`。`...

    C#Winform多个子窗口与主窗口之间任意切换不闪烁源码

    它基于Windows Presentation Foundation(WPF)的早期版本,提供了丰富的控件集和事件处理机制,使得开发者能够方便地创建交互式应用程序。 在该示例中,重点在于如何实现子窗口和主窗口之间的无缝切换,同时避免...

    C#窗口间互相传值通过第三者传值.7z

    C#提供了各种机制,如锁(lock)、Monitor、Mutex、Semaphore等,来保证并发访问的安全性。在这个示例中,如果窗口间的通信跨越了线程边界,那么使用委托同样可以确保线程安全,因为委托调用的方法会按照预定的同步...

    C#中子窗口与父窗口通信

    在C#编程中,窗口通信是应用程序中常见的一种交互方式,尤其在多窗口或多窗体应用中。...例如,对于更复杂的应用场景,可以考虑使用事件、委托或者数据绑定等机制来实现窗口间的通信,以提高代码的可维护性和可扩展性。

    Windows消息处理机制--钩子实例

    当消息在到达目标窗口处理函数之前,钩子机制使得这些消息能够首先被钩子程序捕获。这样就可以实现消息的截获、处理甚至是终止。 #### 二、钩子的工作原理 钩子主要分为两个部分:**钩子链表** 和 **钩子子程**。 ...

    C#窗口式多人聊天系统

    《C#窗口式多人聊天系统详解》 C#是一种由微软公司推出的面向对象的编程语言,广泛应用于Windows平台上的应用程序开发。在这个项目中,我们关注的是一个基于C#实现的窗口式多人聊天系统,它提供了基本的多人聊天...

Global site tag (gtag.js) - Google Analytics