我有一个用 c# (Visual Studio 2010) 开发的 Windows 应用程序,它与连接到 PC 的 USB 端口的 USB-CAN 转换器交互。我在一个线程上实现了 UI,在单独的线程上实现了传输和接收逻辑。完成我的任务后,我想关闭这个线程并返回到当前挂起的 UI 线程!!
我尝试使用 abort 函数强行终止线程,但它引发了异常。那么如何在我的任务完成后优雅地结束这个线程。
我有以下两个问题:
- 如何优雅地终止线程并返回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