c# Thread 线程
2017-02-27 18:16
513 查看
Thread 类
线程
Thread.IsBackground 属性
获取或设置一个值,该值指示某个线程是否为后台线程。
true为后台线程,false为前台线程,默认为false.
注意前台线程和后台线程的区别:
例如在主线程下new了一个新的线程,此线程默认为前台线程,当关闭窗口结束主线程的时候,此线程还未结束,因此在任务管理器中还是可以看到当前的程序进程。
如果把此线程IsBackground = true,则此线程为后台线程,当主线程结束的时候此线程也会结束。
总结:
前台线程使进程保持运行,直到它的循环体结束为止,才会终止当前程序的进程。
后台线程不会阻止进程的终止,当前程序的进程结束了次线程就结束了。
应用程序进程的存亡由前台线程决定而于后台线程无关。
public static void Sleep(
int millisecondsTimeout
)
挂起线程的毫秒数。
在wpf程序中,子线程不能直接访问mxml中的控件,需要调用Dispatcher.Invoke 方法。
例如:Label Button lbl.Dispatcher.Invoke();
Dispatcher.Invoke 方法 (Action)
Dispatcher.CheckAccess 方法 ()
确定调用线程是否是与此Dispatcher相关联的线程。
在mxml中有个Label控件Name为lb
<Label Name="lb" Content="Label"/>
在对应的cs脚本中的代码
正确的使用方法如下:
线程
Thread.IsBackground 属性
获取或设置一个值,该值指示某个线程是否为后台线程。
true为后台线程,false为前台线程,默认为false.
注意前台线程和后台线程的区别:
例如在主线程下new了一个新的线程,此线程默认为前台线程,当关闭窗口结束主线程的时候,此线程还未结束,因此在任务管理器中还是可以看到当前的程序进程。
如果把此线程IsBackground = true,则此线程为后台线程,当主线程结束的时候此线程也会结束。
总结:
前台线程使进程保持运行,直到它的循环体结束为止,才会终止当前程序的进程。
后台线程不会阻止进程的终止,当前程序的进程结束了次线程就结束了。
应用程序进程的存亡由前台线程决定而于后台线程无关。
public static void Sleep(
int millisecondsTimeout
)
挂起线程的毫秒数。
private void Init() { Thread thread1 = new Thread(DoWork); thread1.Start(); } private void DoWork() { for (int i = 0; i < 3; i++) { Console.WriteLine("DoWork..."); Thread.Sleep(100); } }
在wpf程序中,子线程不能直接访问mxml中的控件,需要调用Dispatcher.Invoke 方法。
例如:Label Button lbl.Dispatcher.Invoke();
Dispatcher.Invoke 方法 (Action)
Dispatcher.CheckAccess 方法 ()
确定调用线程是否是与此Dispatcher相关联的线程。
在mxml中有个Label控件Name为lb
<Label Name="lb" Content="Label"/>
在对应的cs脚本中的代码
private void Init() { Thread thread = new Thread(DoWork); thread.Start(); } private void DoWork() { lb.Content = "Hello";//会报错 引发InvalidOperationException异常 }
正确的使用方法如下:
private void Init() { Thread thread = new Thread(DoWork); thread.Start(); } private void DoWork() { if(lb.Dispatcher.CheckAccess()) { //可以直接调用 lb.Content = "Hello"; } else { //不能直接调用需要用Dispatch.Invoke lb.Dispatcher.Invoke(UpdateLabelMsg); } } private void UpdateLabelMsg() { lb.Content = "Hello"; }
相关文章推荐
- C# multithread,threadpool,ParameterizedThreadStart,传递参数给线程以及回调
- C#线程类Thread初步
- [C#学习笔记之多线程1]使用ParameterizedThreadStart委托向线程函数传送参数
- 步步为营 C# 技术漫谈 六、线程控制(Thread)
- Thread and Sync In C# (C#中的线程与同步)
- 线程—Thread(C#讲解)
- [深入学习C#]C#实现多线程的方法:线程(Thread类)和线程池(ThreadPool)
- C#学习常用类(2000)---Thread类(前台与后台线程)
- 依旧是转载来的Thread and Sync In C# (C#中的线程与同步)
- C#Thread 线程的简单使用
- C#基础:使用Thread创建线程
- c# WaitHandle类在线程池ThreadPool(超过64个线程时)中的使用方法
- 用CheckForIllegalCrossThreadCalls 属性解决C#线程间操作无效
- C# 线程知识--使用ThreadPool执行异步操作
- NET(C#):线程本地存储(Thread-Local Storage)之ThreadStatic, LocalDataStoreSlot和ThreadLocal<T>
- C# 多线程学习(六)线程池(ThreadPool)——线程资源的复用和自动管理
- 9.C#知识点:线程初识及Thread初识(一)
- C# 多线程编程 - 使用Thread类创建线程
- C#中的线程四(System.Threading.Thread)
- C#基础:使用Thread创建线程