Zawiecha zamykanej aplikacji czytającej z portu RS232- prośba o wypowiedź eksperta

0

Chciałbym napisać prosty programik czytający z portu RS232 do textBox'a.

Zrobiłem poniższy kod i działa (czyta i wyświetla co przeczytał z portu RS232), jednakże kiedy próbuję zamknąć aplikacje to okienko się zawiesza i formatka się nie wyłącza.

Czy macie jakiś pomysł jak usprawnić kod żeby aplikacja się nie wieszała?

private: System::Void MyForm_FormClosing(System::Object^  sender, System::Windows::Forms::FormClosingEventArgs^  e) {
this->serialPort1->Close();
				
	


delegate void SetRichTextDelegateType(System::String ^);

private: System::Void serialPort1_DataReceived(System::Object^  sender, System::IO::Ports::SerialDataReceivedEventArgs^  e) {
			 
 String^ myString = serialPort1->ReadLine();
 SetRichTextDelegateType ^pfnDelegate = gcnew SetRichTextDelegateType(this, &MyForm::SetRichText);
 this->textBox1->Invoke(pfnDelegate, myString);


		 }
 private: void SetRichText(String ^myString)
// wątek do zapisu tekstu pobranego z portu
 {

 try {

	textBox1->AppendText(myString);

	
 }

catch (Win32Exception^ ex)

 {

	MessageBox::Show(ex->Message);}

}
0

Problem rozwiązałem :)

Z uwagi iż przez port cały czas przesyłane są dane, nawet przy zamykaniu aplikacji podejmowana była próba odczytu z portu i zapidu do textBoxa.

Dodałem instrukcję warunkową if (serialPort1->IsOpen) i po problemie

 
private: System::Void serialPort1_DataReceived(System::Object^  sender, System::IO::Ports::SerialDataReceivedEventArgs^  e) {
	
	 String^ myString = serialPort1->ReadLine();
 
	 if (serialPort1->IsOpen){
			  if (this->InvokeRequired)
            {
              SetRichTextDelegateType^ pfnDelegate = gcnew SetRichTextDelegateType(this, &MyForm::SetRichText);
			  this->textBox1->Invoke(pfnDelegate, myString);
			  
            }
            else
            {
				//this->textBox1->Text =myString; 
            }
	 }
			

		 }

1 użytkowników online, w tym zalogowanych: 0, gości: 1