[Quote=引用 3 楼 mjp1234airen4385 的回复:]
这个是可以的。消息接收是没有问题的。应该是你的使用方法不正确造成的。
另外,既然是C#接收EVC的消息,说明这是两个程序,两个程序就是两个进程,
本来就是异步的,不需要你在C#中另外多加线程来处理。
除非你在C#中还要有其他的操作才需要进入线程。
这是捕获消息的类:
public class DoMessages : MessageWindow
{
FrmMain frmMain = null;
public const int UM_NEWDATA = 0x0400 + 0x0100;
public const int UM_ND_START = UM_NEWDATA + 0x0001;
public const int UM_ND_APPEND = UM_NEWDATA + 0x0002;
public const int UM_ND_STOP = UM_NEWDATA + 0x0009;
public const int UM_ND_DOEVENT= UM_NEWDATA + 0x0003;
public DoMessages(FrmMain frmmain)
{
frmMain = frmmain;
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case UM_NEWDATA:
switch((int)m.WParam)
{
case UM_ND_START:
frmMain.State = "正在打开:" + frmMain.FileName;
frmMain.TxtText.Text = "";
break;
case UM_ND_APPEND:
if(null != frmMain.SBNewData)
frmMain.TxtText.Text += frmMain.SBNewData.ToString();
break;
case UM_ND_DOEVENT:
Application.DoEvents();
break;
case UM_ND_STOP:
frmMain.State = frmMain.FileName;
break;
default:
break;
}
break;
}
base.WndProc(ref m);
}
}
这是调用方法。
public partial class FrmMain : Form
{
[DllImport("coredll.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
DoMessages doMessages = null;
public FrmMain()
{
InitializeComponent();
doMessages = new DoMessages(this); }
[/Quote]
这个是可以的。消息接收是没有问题的。应该是你的使用方法不正确造成的。
另外,既然是C#接收EVC的消息,说明这是两个程序,两个程序就是两个进程,
本来就是异步的,不需要你在C#中另外多加线程来处理。
除非你在C#中还要有其他的操作才需要进入线程。
这是捕获消息的类:
public class DoMessages : MessageWindow
{
FrmMain frmMain = null;
public const int UM_NEWDATA = 0x0400 + 0x0100;
public const int UM_ND_START = UM_NEWDATA + 0x0001;
public const int UM_ND_APPEND = UM_NEWDATA + 0x0002;
public const int UM_ND_STOP = UM_NEWDATA + 0x0009;
public const int UM_ND_DOEVENT= UM_NEWDATA + 0x0003;
public DoMessages(FrmMain frmmain)
{
frmMain = frmmain;
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case UM_NEWDATA:
switch((int)m.WParam)
{
case UM_ND_START:
frmMain.State = "正在打开:" + frmMain.FileName;
frmMain.TxtText.Text = "";
break;
case UM_ND_APPEND:
if(null != frmMain.SBNewData)
frmMain.TxtText.Text += frmMain.SBNewData.ToString();
break;
case UM_ND_DOEVENT:
Application.DoEvents();
break;
case UM_ND_STOP:
frmMain.State = frmMain.FileName;
break;
default:
break;
}
break;
}
base.WndProc(ref m);
}
}
这是调用方法。
public partial class FrmMain : Form
{
[DllImport("coredll.dll")]
static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
DoMessages doMessages = null;
public FrmMain()
{
InitializeComponent();
doMessages = new DoMessages(this); }