C# 向指定线程发送消息

这篇博客介绍了如何在C#中实现线程间通信,特别是如何在指定线程中执行方法。文章讨论了线程同步的方法,如互斥锁和WaitHandle的使用,并指出在特殊情况下可能需要利用Windows的消息机制来实现。作者提到了使用WH_GETMESSAGE类型的HOOK和SendMessage函数来向特定线程发送消息,以及回调函数的处理细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程间通信,包括线程同步,在指定线程中执行方法。

线程同步

其中线程同步通过C#本身提供的线程操作还是比较简单的,注意使用互斥锁,WaitHandle的使用可以满足大部分的需求。(互斥锁在不同线程中起作用,不会堵塞同线程的程序运行)。


在指定线程中执行方法

这种情况比较少见,一般都是窗体程序需要后台进行运算,通过运算的结果对前台界面进行更新。大多数情况下使用BackgroundWorker类和Task类可以满足需求。但在极端的情况下可能还是需要自己去实现不同线程的方法执行。

C#本身的线程操作中不能直接做到在一个线程中让另一个特定的线程运行方法,要完成这样的操作,需要用到Windows的消息机制。使用下面的函数可以向指定ID的线程发送消息:

BOOL WINAPI PostThreadMessage(
  _In_ DWORD  idThread,
  _In_ UINT   Msg,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);
在C#中可以用下面的方式引用方法

[DllImport("User32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool PostThreadMessage(int idThread, int Msg, IntPtr wParam, IntPtr lParam);

如果要向一个窗体的线程发送自定义消息,使用PostThreadMessage函数时会发现窗体无法接收到自己定义的消息。这是因为窗体进程的标准消息循环只获取对窗体发送的消息而PostThreadMessage只是指定了接收消息的线程ID,所以通过PostThreadMessage被
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值