2016-09-17 66 views
0

我确实有一个嵌入板(迷你/微小210) 和我没有尝试建立其使用system.socketsystem.socket.ne吨在C#(VS2005应用 - wince5设备应用但我确实有我的设备上的wince 6 !!)mini210插座多线程

我的目的是使用以太网发送和接收数据字节。发送,没有问题,但接收确实需要多任务处理。

我应该开始一个任务,这样它可以监听端口,如果有任何数据即将出现,但是一旦我将线程部分添加到我的代码中,整个程序崩溃(不会在pc x64 core i5中执行此操作),而是在嵌入式主板它会崩溃。

如果我消除了多任务处理时networkstream.read不在线或者我可能会失去一些数据时networkstream.read处于联机状态,我在等数据,在程序从而结束,直到不会响应了时间到。这里是我的一些代码。希望能帮助到你。

这个代码工作:

private void button_connect_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      //Thread TH = new Thread(new ThreadStart(con)); 
      //TH.Start(); 
      con(); 
     } 
     catch 
     { 
      MessageBox.Show("THREAD ERROR"); 
     } 
    } 
    public void con() 
    { 
     try 
     { 
      cli = null; 
      cli = new TcpClient(); 
      cli.Connect(IPAddress.Parse(textBox_ip.Text),Convert.ToInt32(textBox_port.Text)); 
      st = null; 
      st = cli.GetStream(); 
      button_connect.Enabled = false; 
      button_Close.Enabled = false; 
      button_disconnect.Enabled = true; 
      statusBar1.Text = "Connected to server"; 
      //Thread rec = new Thread(new ThreadStart(recf)); 
      //rec.Start(); 
     } 
     catch 
     { 
      MessageBox.Show("Connection faild","Error"); 
      statusBar1.Text = "Faild to connect to server"; 
     } 

这个代码剂量工作:

private void button_connect_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      Thread TH = new Thread(new ThreadStart(con)); 
      TH.Start(); 
      //con(); 
     } 
     catch 
     { 
      MessageBox.Show("THREAD ERROR"); 
     } 
    } 
    public void con() 
    { 
     try 
     { 
      cli = null; 
      cli = new TcpClient(); 
      cli.Connect(IPAddress.Parse(textBox_ip.Text),Convert.ToInt32(textBox_port.Text)); 
      st = null; 
      st = cli.GetStream(); 
      button_connect.Enabled = false; 
      button_Close.Enabled = false; 
      button_disconnect.Enabled = true; 
      statusBar1.Text = "Connected to server"; 
      //Thread rec = new Thread(new ThreadStart(recf)); 
      //rec.Start(); 
     } 
     catch 
     { 
      MessageBox.Show("Connection faild","Error"); 
      statusBar1.Text = "Faild to connect to server"; 
     } 
    } 

,你可以看到我得到这个崩溃,只是我的任务之一是在代码第二个任务已被评论

我很感谢你的帮助提前

回答

0

崩溃可能是由更新辅助线程的UI元素引起的。

con方法读取文本框并更新几个按钮以及状态栏,这应该只发生在主应用程序线程上。

要验证这是否是问题,您可以简单地注释掉访问UI元素的con方法中的行(在启动线程之前将textbox值复制到成员字符串,或者仅对IP地址进行硬编码)并重新运行该应用程序。

然后要真正解决问题,您必须查看Control.Invoke