Witam, w ramach pracy inz. muszę napisać aplikację która będzie komunikować się z moim urządzeniem. Nigdy prędzej nie programowałem w języku C#, ale korzystając m.in. z informacji na forum udało mi się nawiązać prostą komunikację która na razie pozwala odczytać odebrane dane. Mój problem polega na tym, że wywołując metodę Close() w trakcie odbierania danych program się zawiesza. Gdy wcisnę button odpowiedzialny za zamknięcie portu w przedziale czasu gdy procesor nie wysyła żadnych danych to bez problemu port się zamyka.
Za odbiór danych odpowiada zdarzenie:
Kod:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
flaga_odbioru = 1;
SerialPort sp = (SerialPort)sender;
InputData = sp.ReadExisting()
this.Invoke(new EventHandler(DisplayText)); // wyswietla odebrany tekst
flaga_odbioru = 0;
}
Jak widać powyżej próbuję rozwiązać ten problem stosując flagę odbioru którą wykorzystuję w funkcji obsługi zdarzenia wciśniecia buttona odpowiedzialnego za zamknięcie portu:
Kod:
private void button2_Click(object sender, EventArgs e)
{
while (flaga_odbioru != 0) ;
if (serialPort1.IsOpen == true) serialPort1.Close();
}
Macie może jakieś pomysły jak sobie z tym poradzić, gdzie tkwi problem ?