PC の USB ポートに接続された USB-CAN コンバーターと対話する c# (Visual Studio 2010) で開発された Windows アプリケーションがあります。1 つのスレッドに UI を実装し、別のスレッドに送受信ロジックを実装しました。タスクが完了したら、このスレッドを閉じて、現在ハングしている UI スレッドに戻りたいと思います!!
アボート機能を使ってスレッドを強制終了させようとしたところ、例外がスローされました。では、タスクの完了後にこのスレッドを正常に終了する方法。
次の 2 つの質問があります。
- スレッドを正常に終了して UI スレッドに戻る方法は?
- この送受信スレッドが中止されず、UI スレッドがハングしないのはなぜですか?
以下のコードは参考用です。
#region recievedthrad
public void ThreadProcReceive()
{
try
{
bool fDoExit = false;
do
{
if (bFlag)
DeleteAllResources(); // This will free all the driver resources.
// wait for receiving messages or exiting this thread
/* Note: After completion of the task, this method needs to return a 0 or 2 value. But still it returns 1 or 258 and never exits the thread. */
int index = WaitHandle.WaitAny(m_RxWaitHandles);
if (index == 0)
{
// exit this thread
fDoExit = true;
}
else if (index == 1)
{
// receive all messages
ReceiveAllCanMessages();
}
else if (index == 2)
{
// exit this thread
ReceiveStatus(UcanDotNET.USBcanServer.USBCAN_CHANNEL_CH0);
}
} while ((fDoExit == false));
}
catch(Exception ex)
{
}
}
#endregion