2016-09-17 68 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