线程几乎是所有项目或多或少都在用的一种技术手段了,在WPF项目中更是用的只会多不会少的。所以通过WPF的世界来介绍下线程。学习过《计算机操作系统》的基本很容易去理解线程和同/异步有多么的重要,进程、线程和同/异步的出现是让我们的计算机有这么大发展的基础之一。WPF的多线程和window窗体中的多线程基本一样,只是实现的细节和底层支持有点不一样。
我们的程序通常会执行很多的任务,在我们没处理的正常情况下任务都是同步进行的,也就是说在这个应用程序中一次只能执行一个任务,当这个任务执行结束了,才会去执行下一个任务。在这种情况下,长时间的占用就意味着长时间的等待,这个叫做线程阻塞,不仅很影响用户体验,拖累性能,更严重的还让人误以为程序死了。
为了避免线程阻塞,牛逼的前辈这时候就创造了后台线程,并且允许异步操作这种技术出来了。是的,多线程和同步、异步不是一个事。当后台线程完成自己的任务后,它是可以通知到程序的,这个时候程序会接着做自己事,这个叫做“线程同步”。是不是有点绕,我说明下,就像物理一样,同步异步只是参照物不同,AB任务是并列执行的异步操作,AC也许是同步执行的操作。
正常情况下WPF的对象只属于创建它的线程,而不会被其它线程所直接访问。就是说你一个后台线程是不能去访问主线程的用户界面的所有对象,比如改一个TextBox的值。当一个对象呗关联到一个单线程时,就认为它是一个单线程对象,并且认为该对象具有线程关联度。WPF觉得这样不太方便,所以能创造了一个STA(Single Threaded Apart

本文介绍了WPF项目中的线程基础知识,包括线程的重要性、后台线程与异步操作、线程同步与线程关联度的概念。WPF的DispatcherObject和分发器在多线程交互中的作用,以及如何使用Invoke和BeginInvoke方法。最后,文中列举了四种创建线程的方式以及线程安全的方法,如Mutex、AutoResetEvent和Lock。
最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



