WPF中的多进程(Threading)处理实例(一)
说明:希望通过揣摩这些案例,能进一步了解进程的工作原理。
1.方法一描述的是在同一窗口中,在计算素数的同时而不影响Canvas的工作。
- #region Long-Running Calculation in UI Thread
- public delegate void NextPrimeDelegate();
- private long num = ;
- private bool continueCalculating = false;
- private bool fNotAPrime = false;
- private void btnPrimeNumber_Click(object sender, RoutedEventArgs e)
- {
- if (continueCalculating)
- {
- continueCalculating = false;
- btnPrimeNumber.Content = "Resume";
- }
- else
- {
- continueCalculating = true;
- btnPrimeNumber.Content = "Stop";
- //获取与此 System.Windows.Threading.DispatcherObject 关联的 System.Windows.Threading.Dispatcher
- //public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method);
- //按指定的优先级在与 System.Windows.Threading.Dispatcher 关联的线程上异步执行指定的委托。
- btnPrimeNumber.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new NextPrimeDelegate(CheckNextNumber));
- }
- }
- public void CheckNextNumber()
- {
- // Reset flag.
- fNotAPrime = false;
- for (long i = ; i <= Math.Sqrt(num); i++)
- {
- if (num % i == )
- {
- // Set not-a-prime flag to true.
- fNotAPrime = true;
- break;
- }
- }
- // If a prime number.
- if (!fNotAPrime)
- {
- tbPrime.Text = num.ToString();
- }
- num += ;
- if (continueCalculating)
- {
- //3.In the CheckNextNumber function, because the first parameter
- //passed into BeginInvoke is DispatcherPriority.SystemIdle(在系统空闲时处理操作。),
- //all of the CheckNextNumber workitem will not break the UI operation.
- btnPrimeNumber.Dispatcher.BeginInvoke(
- System.Windows.Threading.DispatcherPriority.SystemIdle,
- new NextPrimeDelegate(this.CheckNextNumber));
- }
- }
- #endregion
- #region Blocking Operation in Worker Thread
- private delegate void NoArgDelegate();
- private delegate void OneArgDelegate(Int32[] arg);
- //1.When the Retrieve Data from Server button is clicked, the click handle retrieveData function is called.
- private void btnRetrieveData_Click(object sender, RoutedEventArgs e)
- {
- this.btnRetrieveData.IsEnabled = false;
- this.btnRetrieveData.Content = "Contacting Server";
- NoArgDelegate fetcher = new NoArgDelegate(this.RetrieveDataFromServer);
- //2.Then our codes use delegate.BeginInvoke to start a thread from the thread pool.
- //This thread is used to perform the long operation of retrieving data.
- fetcher.BeginInvoke(null, null);
- }
- /// <summary>
- /// Retrieve data in a worker thread(辅助线程).
- /// </summary>
- private void RetrieveDataFromServer()
- {
- //3.We use Thread.Sleep(5000) to simulate(模拟) a 5 seconds delay here.
- // Simulate the delay from network access.
- Thread.Sleep();
- //4.The codes generate 4 random numbers as data and update them to the UI by calling the Dispatcher.BeginInvoke().
- // Generate random data to be displayed.
- Random rand = new Random();
- Int32[] data = {
- rand.Next(), rand.Next(),
- rand.Next(), rand.Next()
- };
- // Schedule the update function in the UI thread.
- this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal,
- new OneArgDelegate(UpdateUserInterface), data);
- }
- /// <summary>
- /// Update the UI about the new data. The function runs in the UI thread.
- /// </summary>
- /// <param name="data"></param>
- private void UpdateUserInterface(Int32[] data)
- {
- this.btnRetrieveData.IsEnabled = true;
- this.btnRetrieveData.Content = "Retrieve Data from Server";
- this.tbData1.Text = data[].ToString();
- this.tbData2.Text = data[].ToString();
- this.tbData3.Text = data[].ToString();
- this.tbData4.Text = data[].ToString();
- }
- #endregion
WPF中的多进程(Threading)处理实例(一)的更多相关文章
- WPF中的多进程(Threading)处理实例(二)
原文:WPF中的多进程(Threading)处理实例(二) //错误的处理 private void cmdBreakRules_Click(object sender, RoutedEventArg ...
- 线程在WPF中的使用
项目中可能会有这样的需求,一直获取新的某个数据信息,但仍不影响其他的操作功能,这时就用到了线程,获取新数据放到线程中操作,对其他操作不产生影响,下面就以随机获取数组中项为例解说WPF中使用线程这一实例 ...
- WPF中未将对象引用设置到对象的实例
前几天,我开始了WPF的基础学习,一上来我就遇到了一个令我头痛的问题,按照书上的例子我写了一段属于自己的代码,一个简单的色调器.满心期待的编译运行,就出现了未将对象引用设置到对象的实例.我在网上查阅了 ...
- WPF中,如何将绑定源设置到单件实例
原文:WPF中,如何将绑定源设置到单件实例 WPF中,如何将绑定源设置到单件实例 周银辉 大概两个月前,曾有位朋友问我:如 ...
- WPF中元素拖拽的两个实例
今天结合之前做过的一些拖拽的例子来对这个方面进行一些总结,这里主要用两个例子来说明在WPF中如何使用拖拽进行操作,元素拖拽是一个常见的操作,第一个拖拽的例子是将ListBox中的子元素拖拽到ListV ...
- Python中的多进程与多线程(二)
在上一章中,学习了Python多进程编程的一些基本方法:使用跨平台多进程模块multiprocessing提供的Process.Pool.Queue.Lock.Pipe等类,实现子进程创建.进程池(批 ...
- Python中使用多进程来实现并行处理的方法小结
进程和线程是计算机软件领域里很重要的概念,进程和线程有区别,也有着密切的联系,先来辨析一下这两个概念: 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和 ...
- 聊聊Python中的多进程和多线程
今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...
- Windows 消息循环(2) - WPF中的消息循环
接上文: Windows 消息循环(1) - 概览 win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来. 本文介绍 WPF 中是如何使用消息循环来驱动程序的. 4 消息循环在 ...
随机推荐
- ios app初始化和数据迁移的设计思路
整体思路 一般app启动之后,都有一个初始化的过程. 此外兴许app升级,还须要考虑数据迁移.所以初始化和数据迁移的框架.在初期的版本号就要考虑好 总结一下我们的app採取的方案: 1.在持久化的文件 ...
- 不使用left-join等多表关联查询,只用单表查询和Java程序,简便实现“多表查询”效果
上次我们提到,不使用left-loin关联查询,可能是为了提高效率或者配置缓存,也可以简化一下sql语句的编写.只写单表查询,sql真得太简单了.问题是,查询多个表的数据还是非常需要的. 因此,存在这 ...
- IT增值服务-客户案例(三):合肥薪火科技,Java和P2P网络借贷系统开发指导
客户整体情况: 合肥薪火科技,是安徽合肥一家主营微信开发和运营的中小企业,http://weimarket.cn/. 这家公司筹备.创立.曲折创业的经历,我一直有关注.因为2个老板,都是我的同学校友, ...
- head first c 笔记<3> 之做一件事并把它做好
1.标准输入.输出与重定向 scanf()和printf()分别为标准输入输出.默认的会从键盘得到数据,在显示器输出数据,是fscanf()和fprintf()函数的特例. 我们也能够用重定向来改变默 ...
- Oracle中的游标(转)
Oracle中的游标有两种:显式游标.隐式游标.显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理,而隐式游标是在执行插入 (insert).删除 ...
- KVC设置系统自带属性,不管是不是私有的属性
KVC 可以设置系统自带属性,不管是不是私有的属性: 1, 2,
- 【BZOJ 1022】 [SHOI2008]小约翰的游戏John
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1022 [题意] [题解] 和这题类似http://blog.csdn.net/harl ...
- [GeekBand] 设计模式之观察者模式学习笔记
本文参考文献::GeekBand课堂内容,授课老师:李建忠 :网络资料: http://blog.csdn.net/hguisu/article/details/7556625 本文仅作为自己的学习笔 ...
- FreeBSD 内核中的SYSINIT分析【转】
FreeBSD kernel是一个膨大的系统, 对于这样一个大系统, 里面往往包含了大量的子系统和 模块,当系统初始化时这些模块就需要初始化, 按照通常的思路,这些初始化过程必须在某处 被显式地调 ...
- Verilog分频器
verilog设计进阶 时间:2014年5月6日星期二 主要收获: 1.自己动手写了第一个verilog程序. 题目: 利用10M的时钟,设计一个单周期形状例如以下的周期波形. 思考: 最開始的想法是 ...