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 消息循环在 ...
随机推荐
- VMWare提供三种工作模式桥接(bridge)、NAT(网络地址转换)和host-only(主机模式)
1.桥接模式 在桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机(主机和虚拟机处于对等地位),它可以访问网内任何一台机器.在桥接模式下,我们往往需要为虚拟主机配置IP地址.子网 ...
- 【翻译自mos文章】当使用原地升级的方法将db升级到11.2.0.4之后,windows注冊表丢失autostart属性
来源于: Windows Registry Missing Autostart Attribute after In-Place Upgrade of Oracle Database from 11. ...
- js如何实现点击显示和隐藏表格
js如何实现点击显示和隐藏表格 一.总结 一句话总结: 1.给table或者table里面的元素添加点击事件, 2.然后判断当前表格的数据显示或者隐藏, 3.然后通过display属性显示(非none ...
- NOIP模拟 回文序列 - DP
题意: 如果一个字符串等于s和t的长度之和(\(l \le 50\)),并且可以拆成两个字符串子序列,分别与s和t相同,那么它就是s和t的一个并字符串(从字符串中选出若干个可以不连续的字符按照原序列写 ...
- 基于 OAuth 安全协议的 Java 应用编程
OAuth 简介 OAuth 是由 Blaine Cook.Chris Messina.Larry Halff 及 David Recordon 共同发起的,目的在于为 API 访问授权提供一个安全. ...
- activity-alias详解及应用
activity-alias标签元素众所周知,AndroidManifest是一个xml文件,它包含很多标签元素,如application.activity.receiver等,其中有一个叫做acti ...
- 【BZOJ 1016】[JSOI2008]最小生成树计数(搜索+克鲁斯卡尔)
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1016 [题意] [题解] /* 两个最小生成树T和T'; 它们各个边权的边的数目肯定是 ...
- TensorFlow 实战(三)—— 实现常见公式
tf.reduce_mean (求向量的均值)等价于 1N∑i=1Nxi 1. 对权值矩阵进行 l2 正则 def variable_with_weight_loss(shape, stddev, w ...
- C/C++ 常量的定义与应用(编程中的常量)
常量一般定义为全局变量,且大写: 1. 字符串常量 const string EXPAND_X = "X+YF"; const string EXPAND_Y = "FX ...
- 如何移除解决方案中的TFS版本控制
1.清除(删除)项目下的所有版本控制文件,这些文件有:*.vssscc,*.vspscc删除这些版本控制文件比较简单,搜索这些后缀的文件,删除即可. 2.修改项目的解决方案文件:*.sln (1).先 ...