WPF编程线程使用记录
对于线程
Thread myReceiveCANthread;
myReceiveCANthread = new Thread(F_mythreadReceiveCan);
myReceiveCANthread.IsBackground = true;
可以设置线程myReceiveCANthread的IsBackground 为true,这样这个线程就是后台线程,当前台线程(主线程)关闭时,这个线程也同步自动销毁;
另外通过调用Abrot()方法也可以,停止某一线程,但是需要线程执行完毕后才能终止,也并不是立即终止,
故在某些情况下,建议可以设置 状态标志位去终止线程
1、如果对尚未启动的线程调用 Abort,则当调用 Start 时该线程将中止。如果对被阻止或正在休眠的线程调用 Abort,则该线程被中断然后中止。
2、如果在已挂起的线程上调用 Abort,则将在调用 Abort 的线程中引发 ThreadStateException,并将 AbortRequested 添加到被中止的线程的 ThreadState 属性中。 直到调用 Resume 后,才在挂起的线程中引发 ThreadAbortException。
3、如果在正在执行非托管代码的托管线程上调用 Abort,则直到线程返回到托管代码才引发 ThreadAbortException。
4、如果同时出现两次对 Abort 的调用,则可能一个调用设置状态信息,而另一个调用执行 Abort。但是,应用程序无法检测到此情况。
5、对线程调用了 Abort 后,线程状态包括 AbortRequested。 成功调用 Abort 而使线程终止后,线程状态更改为 Stopped。如果有足够的权限,作为 Abort 目标的线程就可以使用 ResetAbort 方法取消中止操作。有关说明如何调用 ResetAbort 方法的示例,请参见 ThreadAbortException 类。
另外:
WPF还提供一种定时器的线程
private System.Threading.Timer sendin10mstimer;
sendin10mstimer = new System.Threading.Timer(new TimerCallback(sendCANmessagein10mstimer), this, 50, 10);
每隔xxms执行一次线程,可用于定时周期性执行一些命令
如下方法可以释放此线程的资源,可用用于释放线程相关资源
sendin10mstimer.Dispose();
另外当主程序关闭时,需要调用方法 将所有的线程关闭,否则可能UI前台界面关闭,但后台线程依然在执行的情况。
简单粗暴的方法是windows 关闭的的函数中调用
private void Window_Closed(object sender, EventArgs e)
{
Environment.Exit(0);
}
所有资源将被销毁