串口异步接收消息

冬夜 2015-12-13 12:46:50
请教下
   private void ComDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
UpdateRecevie(ComDevice.ReadExisting());
}

public delegate void UpdateString(object NewData);
public void UpdateRecevie(object NewData)
{
try
{
if (this.InvokeRequired)//等待异步
{
UpdateString _myInvoke = new UpdateString(UpdateRecevie);
this.Invoke(_myInvoke, new object[] { NewData });
}
else
{
// ReceiveDate = ReceiveDate + NewData.ToString();
txtReceive.AppendText(NewData.ToString());
Analyse();
}
}
catch { }
}


以上代码是现在正在使用的,SerialPort 代码写在窗口的cs文件中,现在想把代码放到BLL层里完成对应操作。
异步操作的部分要怎么写 因为在BLL里没有 InvokeRequired 和 Invoke 了
...全文
126 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2015-12-15
  • 打赏
  • 举报
回复
如果只是解决这个委托就用下面的方式。BLL其他代码自己实现。

private void ComDevice_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            UpdateRecevie(ComDevice.ReadExisting());
        }
 
        public delegate void UpdateString(object NewData);
        public void UpdateRecevie(object NewData)
        {
            try
            {



						  if (System.Windows.Application.Current != null) //WPF
                            {
                                System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>
                                {
                                    xxxxx
                                }));
                            }
                            else if (System.Windows.Forms.Application.OpenForms.Count > 0) //WINFORM
                            {
                                System.Windows.Forms.Application.OpenForms[0].Invoke(new Action(() =>
                                {
                                   xxxxx
                                }));
                            }
                            else
                            {
                              xxxxx //控制台
                            }



            
            }
            catch { }
        }


冬夜 2015-12-15
  • 打赏
  • 举报
回复
请高手 指点下
冬夜 2015-12-13
  • 打赏
  • 举报
回复
是我没有描述正确,txtReceive 这个是以前的代码 现在改成WPF 版本的了 用MVVM开发,UI的文本控件绑定 VM里的string 变量,所以串口部分的代码 要放到ViewModel里
  • 打赏
  • 举报
回复
你的代码是要更新 UI 前端控件(txtReceive),放在BLL 干什么?

110,534

社区成员

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

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

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