CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

串口通信,多线程同步的问题。

楼主wl2zw(磊)2004-12-01 19:27:09 在 .NET技术 / C# 提问

用c#.net开发,在wince运行。    
   
      通过串口向单片机发送数据a,单片机回复数据b,然后在向单片机发送数据c,单片机在回复数据d。就是这样两次   一问一答式的数据发送接收,我按平常的方式   用port.Output   =   buf   这样写发送,然后在   private   void   port_DataReceived()   这个过程中写接收事件,并在这个事件中写发送数据c的程序。   在接收的过程中   有把   接收的数据显示在文本框里。    
  可是   这样接受发送几次后,程序会突然死掉,界面没有反应了。  
   
        我想是不是因为发送接收的事件阻塞导致的,就试着用多线程来处理。  
  建立了个主线程A,然后在线程A中先创建发送线程B,后创建接收线程C,可是还是不行,程序会死掉。我后来才知道,线程B,C创建的顺序跟执行的顺序不一致,所以我想知道用c#怎么写   多线程同步的代码,就是要能   在线程b执行完后在执行线程c!  
   
  或者程序中要要怎么做才能处理好串口通信中的   发送与接受的关系,保证通信不会死掉? 问题点数:50、回复次数:10Top

1 楼wl2zw(磊)回复于 2004-12-01 20:07:02 得分 0

自己顶Top

2 楼raulredondo()回复于 2004-12-01 20:11:57 得分 0

只需要两个线程就可以了,一个是界面,一个是接受和发送。  
  收到了就马上发送,然后把自己挂起,下次串口中断来的时候再把线程唤醒Top

3 楼wl2zw(磊)回复于 2004-12-01 20:25:27 得分 0

能不能把代码贴点出来让我看看,我不熟悉c#,也不熟悉多线程啊。。。Top

4 楼raulredondo()回复于 2004-12-01 22:46:30 得分 0

Thread   t;  
  this.t   =   new   Thread(new   ThreadStart(target));  
   
  void   target()  
  {  
          while(true)  
          {  
                  //     Receive   and   send  
                  this.t.ThreadState   =   ThreadState.Suspend;  
          }  
  }  
   
  //   com   event  
  void   on_Comm(.....)  
  {  
          this.t.Resume();  
  }  
   
  代码是手写的,肯定有语法错误,你就当伪代码看好了  
  还有,你要在合适的地方打开线程Top

5 楼wl2zw(磊)回复于 2004-12-02 08:33:37 得分 0

恩,我是在c#.net中新建了个智能设备应用程序   来开发的,可是它不支持                 this.t.ThreadState   =   ThreadState.Suspend   跟   this.t.Resume();   这样的方法啊,我用c#建立了普通的windows应用程序的话,就可以,这是为什么呢??Top

6 楼wl2zw(磊)回复于 2004-12-02 10:50:38 得分 0

还有有什么办法确定我   第一次发送数据a   给单片机,单片机接收后有返回值b过来呢,要怎么做到我我接受b后然后在发数据c下去呢Top

7 楼raulredondo()回复于 2004-12-02 19:38:15 得分 0

.NET   Framework   精简版不支持Resume和ThreadState,你可以查一下msdn  
  第二个问题,你只好自己做一下记录,看看前面一次发送的是不是aTop

8 楼wl2zw(磊)回复于 2004-12-02 21:47:53 得分 0

郁闷啊,搞不懂。  
  现在有个错误是   :  
    试图创建   System.Windows.Forms.Form   的实例时发生异常。异常为“无法加载   DLL   (AGL)。”。  
  我的窗体设计器打不开了,出现错误,这是为什么?  
  我是用c#创建一个普通的windows应用程序,然后有加了个OpenNETCF   这类,引用了   using   OpenNETCF.IO.Serial;   后来编译的时候出错了。Top

9 楼wl2zw(磊)回复于 2004-12-03 08:58:59 得分 0

线程a,b我要实现的功能:   线程a执行完然后在执行线程b,接着在执行线程a,然后继续b,一直这样循环,请问要怎么写?   不能用private   System.Threading.ReaderWriterLock     rwl=newreadrwriterlock();     因为我是在c#创建智能设备应用程序下进行开发的,所以就如raulredondo()   所说的NET   Framework   精简版不支持这些方法,请问要怎么实现我要的功能???Top

10 楼raulredondo()回复于 2004-12-04 13:55:39 得分 50

自己设一个标志,然后让另外一个线程一直保持死循环,每次循环都判断一次,看是不是执行下面的语句,否则就continue,不过这个方法很快就会把你的pda的电消耗光的Top

相关问题

  • 关于:多线程+串口通信
  • 使用多线程,其中一个来负责串口通信
  • 关于多线程串口通信的问题,大家帮我看看
  • 200分奉上!兄弟们 帮帮我 如何实现多线程里的串口通信啊
  • 串口通信
  • 串口通信
  • 多线程同步问题...
  • 多线程同步问题
  • 关于多线程同步。
  • 多线程同步问题

关键词

  • c#
  • c#.net
  • 线程
  • 单片机
  • 多线程
  • 数据
  • 执行
  • 代码
  • 循环
  • threadstate

得分解答快速导航

  • 帖主:wl2zw
  • raulredondo

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo