首页新闻找找看学习计划

C# nModbus编写窗体应用程序---serialslave出以下bug,怎样解决。

0
悬赏园豆:20 [待解决问题]

初学C#和nModbus,做了个窗体,然后button的click里放置如下建立slave的代码:

 

 1                         SerialPort slavePort = new SerialPort(m_connVariable.m_port);
 2                         slavePort.BaudRate = 9600;
 3                         slavePort.DataBits = 8;
 4                         slavePort.Parity = Parity.None;
 5                         slavePort.StopBits = StopBits.One;
 6                         slavePort.Open();
 7 
 8                         byte unitId = 1;
 9                         m_ModbusSlave = ModbusSerialSlave.CreateRtu(unitId, slavePort);
10                         

11 m_ModbusSlave.DataStore = DataStoreFactory.CreateDefaultDataStore(); 12 m_ModbusSlave.Listen();

然后运行点击button后,程序不是假死未响应,就是出如下错:这是怎么回事,该怎么解决,或者该怎么写个slave端?

 

PS:相同的代码,但如果是console应用程序时,就没有问题?

 

ziyoudefeng的主页 ziyoudefeng | 初学一级 | 园豆:122
提问于:2013-04-08 16:42
< >
分享
所有回答(2)
0

串口操作,winform主线程UI容易卡死,用了委托来处理事件,就不影响了

santosvalen | 园豆:202 (菜鸟二级) | 2013-04-19 22:35
1

Listen 里面是一个无限循环,会阻塞线程。也就是运行Listen以后永远没有返回,线程一直在执行Listen方法。Winform窗体里面事件处理代码默认是处于UI线程,所以程序会“假死未响应”,可以启动一个单独的线程来做Listen。

当你启动Console应用程序时,Console控制台可以理解为是一个单独的Winform程序,而你自己写的程序是没有UI线程的。在Console程序中执行Listen只阻塞了你自己的默认线程(与UI无关),Console的UI线程并没有被阻塞,所以不会出现假死。

sweetjian | 园豆:181 (初学一级) | 2013-06-05 16:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册