Проблемы с кодом C#
- Войдите на сайт для отправки комментариев
Чт, 20/06/2013 - 21:24
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); SerialPort serialPort1 = new SerialPort("COM3", 9600); serialPort1.Open(); //открываем COM-порт string data = ""; while (true) { if (serialPort1.BytesToRead > 0) { data += serialPort1.ReadExisting().ToString(); if(data.Contains("\n")) { label1.Text = data; data = ""; } } } } } }
Проблема в том что не выводится само окно программы, если вставляю MessageBox.Show то покзывает, а окно программы не выводит, проблема мне кажется из-за while, но подскажите как правильно считывать через while.
Не знаю как в С#, но выхода из бесконечного цикла я не наблюдаю. Попробуйте так:
или так:
А кто вам сказал что "через while" вообще правильно?
Если уже хочется "через while" - запускать в отдельном потоке. А так вы заблокировали UI-шных поток, в конструкторе Form1 и форма никогда не может завершить свое создание. Но даже в отдельном потоке - while будет дышать, но это в корне неправильно. загрузка проца и проч. радости.
Правильно - это вешатся на события. Считывать данные в обработчике события. Но тут важно не забыть, что обновлять интерфейс из другого потока - нельзя (сами запустили отдельный поток, или "в обработчике события", которые тоже отдельный поток - не важно). UI-шку можно обновлять только через диспатчер.
Пример чего-то подобного нагуглить можно через "C# Serial WinForms sample". К примеру:
http://www.codeproject.com/Tips/361285/Serial-Port-Communication
А вообще, раз есть попытки сделать while в конструкрторе формы - лучше взять какую-нибудь книжечку по C# WinForms (хотя я, лично, предпочел бы более современную WPF вместо WinForms) - и поучится вообще делать Формочки/UI-шки, разобратся с потоками, событиями, жизненным циклом формы и проч. Бо, подозреваю, что хотя я ответ вам выше и дал, но все это прозвучало как "нужно делать через тирьям-пам-пацию" :) А уж потом - работу с Serial разбирать.
Или "забить на формочки" и делать простые консольные приложения.
Спасибо, сделал событием.