C# 怎么接收 Evc 用SendMessage发过来的信息

wolf_Knight 2009-12-31 02:07:33
在wince 5.0环境下,c# 怎么来接收EVC 用SendMessage发过来的信息,并且异步处理,谢谢大虾贴上代码!
...全文
125 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolf_Knight 2010-01-05
  • 打赏
  • 举报
回复
[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]


谢谢!
mjp1234airen4385 2010-01-04
  • 打赏
  • 举报
回复
这个是可以的。消息接收是没有问题的。应该是你的使用方法不正确造成的。
另外,既然是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); }
wolf_Knight 2009-12-31
  • 打赏
  • 举报
回复
我用msdn的方法试了一下,好像不行。
wzg_soullon 2009-12-31
  • 打赏
  • 举报
回复
我也正在研究这问题,帮顶一下

110,534

社区成员

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

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

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