2016-09-17 2 views
0

я есть встроенный доска (мини/крошечные 210) и я действительно пытался строить приложение, которое использует system.socket и system.socket.ne т в C# (VS2005 - wince5 устройства приложение, но у меня есть wince 6 на моем устройстве!)mini210 гнездо многопоточный

Моя цель - отправлять и принимать байты данных с использованием Ethernet. для отправки, ну нет проблем, но получать нужно многозадачность.

Я должен начать задание, чтобы он мог слушать порт, если есть какие-то данные, но как только я добавлю часть потока в свой код, вся программа выйдет из строя (доза не делает этого в 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

Авария, вероятно, вызвана обновлением элементов пользовательского интерфейса из вторичной резьбы.

Метод con считывает текстовое поле и обновляет несколько кнопок, а также строку состояния, и это должно происходить только в основном приложении.

Чтобы проверить, не является ли эта проблема, вы можете просто прокомментировать строки в методе con, которые обращаются к элементам пользовательского интерфейса (скопируйте значение текстового поля в строку-член перед запуском потока или просто скопируйте IP-адрес) и повторно запустить приложение.

Затем, чтобы исправить эту проблему, вам нужно будет изучить Control.Invoke.

Смежные вопросы