■52825 / inTopicNo.1) |
SerialPort使用後、Closeするとフリーズする |
□投稿者/ kaze (10回)-(2010/08/24(Tue) 22:21:53)
|
分類:[C++/CLI]
お世話になります。
VS2010でC++/CLIを使用しています。
RS232C使用後、Close時にフリーズしてしまう現象に悩まされています。
http://vsug.jp/tabid/63/forumid/46/view/topic/postid/9990/tpage/1/Default.aspx
を参考に、VC++2008EEとVC2010++EEにて以下を動作させてみたのですが、改善しませんでした。
この場合、どのようにすれば良いのでしょうか?
よろしくお願いします。
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
serialPort1->PortName = "COM15";
serialPort1->Open();
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
if(serialPort1->IsOpen){
serialPort1->Close();
}
this->Close();
}
delegate void SetTextCallback(String^ text);
private: void SetText(String^ text){
if( this->textBox1->InvokeRequired )
{
SetTextCallback^ d = gcnew SetTextCallback(this, &RS232CTest::Form1::SetText);
// this->Invoke( d, text ); // これでは Close時にフリーズする
this->BeginInvoke( d, text ); // こっちが正解 → やっぱりフリーズする
}
else
{
this->textBox1->Text += text;
}
}
private: System::Void serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) {
String^ str;
try{
str = serialPort1->ReadLine();
SetText(str);
}catch(InvalidOperationException^ e){
SetText(e->Message );
}catch(TimeoutException^ e){
SetText(e->Message );
}catch(Exception^ e){
SetText(e->Message );
}
}
|
|