原文:WPF中的多进程(Threading)处理实例(一)

说明:希望通过揣摩这些案例,能进一步了解进程的工作原理。

1.方法一描述的是在同一窗口中,在计算素数的同时而不影响Canvas的工作。

方法1

         #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
方法2

   #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)处理实例(一)的更多相关文章

  1. WPF中的多进程(Threading)处理实例(二)

    原文:WPF中的多进程(Threading)处理实例(二) //错误的处理 private void cmdBreakRules_Click(object sender, RoutedEventArg ...

  2. 线程在WPF中的使用

    项目中可能会有这样的需求,一直获取新的某个数据信息,但仍不影响其他的操作功能,这时就用到了线程,获取新数据放到线程中操作,对其他操作不产生影响,下面就以随机获取数组中项为例解说WPF中使用线程这一实例 ...

  3. WPF中未将对象引用设置到对象的实例

    前几天,我开始了WPF的基础学习,一上来我就遇到了一个令我头痛的问题,按照书上的例子我写了一段属于自己的代码,一个简单的色调器.满心期待的编译运行,就出现了未将对象引用设置到对象的实例.我在网上查阅了 ...

  4. WPF中,如何将绑定源设置到单件实例

    原文:WPF中,如何将绑定源设置到单件实例  WPF中,如何将绑定源设置到单件实例                                       周银辉 大概两个月前,曾有位朋友问我:如 ...

  5. WPF中元素拖拽的两个实例

    今天结合之前做过的一些拖拽的例子来对这个方面进行一些总结,这里主要用两个例子来说明在WPF中如何使用拖拽进行操作,元素拖拽是一个常见的操作,第一个拖拽的例子是将ListBox中的子元素拖拽到ListV ...

  6. Python中的多进程与多线程(二)

    在上一章中,学习了Python多进程编程的一些基本方法:使用跨平台多进程模块multiprocessing提供的Process.Pool.Queue.Lock.Pipe等类,实现子进程创建.进程池(批 ...

  7. Python中使用多进程来实现并行处理的方法小结

    进程和线程是计算机软件领域里很重要的概念,进程和线程有区别,也有着密切的联系,先来辨析一下这两个概念: 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和 ...

  8. 聊聊Python中的多进程和多线程

    今天,想谈一下Python中的进程和线程. 最近在学习Django的时候,涉及到了多进程和多线程的知识点,所以想着一下把Python中的这块知识进行总结,所以系统地学习了一遍,将知识梳理如下. 1. ...

  9. Windows 消息循环(2) - WPF中的消息循环

    接上文: Windows 消息循环(1) - 概览 win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来. 本文介绍 WPF 中是如何使用消息循环来驱动程序的. 4 消息循环在 ...

随机推荐

  1. [tmux] Zoom and resize to view a particular pane within tmux

    Sometimes you'll want to zoom in on a specific pane within a tmux window. We'll learn to use C-b z t ...

  2. js进阶 11-1 jquery中的页面内容操作的三个方法

    jquery中的页面内容操作的三个方法 一.总结 一句话总结:记三个方法即可.text,html,val.因为这里是方法,所以设置值的是后面方法的参数. 1.jquery中的页面内容操作的三个方法? ...

  3. 静态编译ltrace

    ltrace可以跟踪进程的库函数调用,它会显现出哪个库函数被调用,而strace则是跟踪程序的每一个系统调用. 有时候只使用strace还是不够的,须要ltrace配合才干找出问题出在哪里. 假设在b ...

  4. Redis+Mysql模式和内存+硬盘模式的异同

    http://www.open-open.com/lib/view/open1346029825942.html 学习任何新知识,都是一个循序渐进的过程,从刚开始的懵懂无知,到简单熟悉,然后突然的彻悟 ...

  5. bootsrap+jquery+组件项目引入文件的常见报错

    做一个项目的时候 ,控制台总是会出现各种bug,其实不用慌张,终结起来也就几种类型的错误,在开发中每次遇到错误都善于总结,下次在看到就会胸有成竹知道是什么情况了,以下是在开发过程中总结的一些错误以及错 ...

  6. mysql 下 计算 两点 经纬度 之间的距离 计算结果排序

    根据经纬度计算距离公式 公式 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung ...

  7. Qt 元对象系统(Meta-Object System)(不管是否使用信号槽,都推荐使用)

    Qt 元对象系统(Meta-Object System) Qt的元对象系统基于如下三件事情: 类:QObject,为所有需要利用原对象系统的对象提供了一个基类. 宏:Q_OBJECT,通常可以声明在类 ...

  8. 欢迎来到Swift天地(Welcome to Swift)

    期待已久的WWDC真的是不管是什么硬件更新,没有太多的开发者,本次会议是还是很有亮点.水果给我们带来了一种新的语言Swift.种无比简洁高效的语言,并且新的 Swift 语言依然会和 C 与 Obje ...

  9. JSON.parse(JSON.stringify()) 实现对对象的深度拷贝,从而互不影响

    JSON.parse(JSON.stringify({"key": "value"})) 根据不包含引用对象的普通数组深拷贝得到启发,不拷贝引用对象,拷贝一个字 ...

  10. Linux在出现/java: cannot execute binary file

    位这样的情况下通常的虚拟机(32和64)不匹配造成的.再次,你的虚拟机下一场比赛JDK的版本号的 在与X64它是64位置,另32位置 版权声明:本文博主原创文章.博客,未经同意不得转载.