关于消息,高手请进,比较简单

conan19771130 2004-12-10 01:20:40
我现在要在一个线程处理事务,然后发送消息到主程序,有几个问题
1.我定义 public const int WM_LOG=WM_USER+100;
提示WM_USER不存在
2.我使用m_socketThread=new Thread(new ThreadStart(StartServer));开始一个线程,如何在这个线程中发送WM_LOG消息。
3.我发消息要记录数据,写了处理函数log(string msg),如何传入string msg
4.主程序我用
/// <summary>
/// 处理消息
/// </summary>
/// <param name="Msg">消息</param>
protected override void wndproc(ref Message Msg)
{
switch(Msg.Msg)
{
case WM_LOG:
break;
default:
base.WndProc(ref Msg); //base从派生类中访问基类的成员
break;
}
}

调用log(string msg)
问题我怎用得到msg?
...全文
133 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
conan19771130 2004-12-13
  • 打赏
  • 举报
回复
高手在那
conan19771130 2004-12-12
  • 打赏
  • 举报
回复
试试,再问一个白痴问题,怎样等待线程结束
mmcgzs 2004-12-12
  • 打赏
  • 举报
回复
API:
[DllImport("user32.dll", EntryPoint="RegisterWindowMessage")]
public static extern int RegisterWindowMessage (
string lpString
);

该函数定义一个新的窗口消息,该消息确保在系统中是唯一的。返回的消息值可在调用函数SendMessage或PostMessage时使用。

如果消息被成功注册,返回值是在范围OxCOOO到OxFFFF的消息标识符;如果函数调用失败,返回值是零。要得到更多的错误信息,调用函数GetLastError。

当一个以上的应用程序必须处理同一个消息时,必须使用RegisterWindowMessage。要在窗口类里发送私有消息,应用程序可以使用UM_USER到OX7FFF范围内的任意整数

例子:
string mymessage="wm_log";
int messageid=0;
messageid=RegisterWindowMessage(mymessage);//不同的过程调用会返回相同的messageid
//调用API sendmessage 发送messageid到主线程的窗口就可以了。
conan19771130 2004-12-12
  • 打赏
  • 举报
回复
wangsaokui请进
conan19771130 2004-12-11
  • 打赏
  • 举报
回复
急啊,请高手指教怎样,在消息中传参数,我不要全局变量
conan19771130 2004-12-10
  • 打赏
  • 举报
回复
那线程之间传递参数呢
isaacyh 2004-12-10
  • 打赏
  • 举报
回复
Windows消息的基本功能
using System;
using System.Runtime.InteropServices;

namespace WindowsAPILibrary
{
/// <summary>
/// 提供Windows消息的基本功能。
/// </summary>
public class WindowsMessage
{
/// <summary>
/// 构造函数
/// </summary>
public WindowsMessage()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

/// <summary>
/// 用户自定义消息
/// </summary>
public const int WM_USER = 0x0400;
/// <summary>
/// 应用程序自定义消息
/// </summary>
public const int WM_APP = 0x8000;
/// <summary>
/// 发送消息,立即返回。
/// </summary>
/// <param name="HWnd">接收消息窗口句柄,<code>Form.Handle</code></param>
/// <param name="Msg">消息标志</param>
/// <param name="WParam">消息参数</param>
/// <param name="LParam">消息参数</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern long PostMessage( IntPtr HWnd, int Msg, IntPtr WParam,IntPtr LParam );
/// <summary>
/// 发送消息,等待返回。
/// </summary>
/// <param name="HWnd">接收消息窗口句柄,<code>Form.Handle</code></param>
/// <param name="Msg">消息标志</param>
/// <param name="WParam">消息参数</param>
/// <param name="LParam">消息参数</param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern long SendMessage( IntPtr HWnd, int Msg, IntPtr WParam,IntPtr LParam );

}
}


调用的时候override窗体的DefWndProc(ref Message m)方法,

protected override void DefWndProc(ref Message m)
{
if(m.Msg == 0x8000)
{
do what you want.......

}
base.DefWndProc (ref m);
}
conan19771130 2004-12-10
  • 打赏
  • 举报
回复
好像就是消息队列,高手请讲讲
conan19771130 2004-12-10
  • 打赏
  • 举报
回复
急啊,再现等待高手

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧