原文: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. 基于 MySQL 5.6 keepalived的双主搭建

    环境介绍: 说明 IP 节点1 192.168.56.56 节点2 192.168.56.57 w_ip 192.168.56.6 安装keepalived tar -zxvf keepalived- ...

  2. svn hook pre-commit

    #!/bin/bashexport LANG="zh_CN.UTF-8" #确保中文日志显示正常,便于统计日志REPOS="$1"TXN="$2&qu ...

  3. [CSS] Re-order the appearance of grid items using the order property

    As with flex items, we can set an order value on grid items. Let’s see how this affects the DOM and ...

  4. 如何安全退出多个Activity

    我们在项目开发的时候可能会遇到安全退出应用的场景,如何能够安全退出多个Activity?网上有很多方法,如下: 1.抛异常退出 该方法通过抛异常,使程序Force Close.验证可以,但是,需要解决 ...

  5. Android 设置图片 Bitmap任意透明度

    两种思路,第一种思路是通过对Bitmap进行操作,将Bitmap的像素值get到一个int[]数组里,因为在android里Bitmap通常是ARGB8888格式,所以最高位就是A通道的值,对齐进行改 ...

  6. [TypeScript] Create a fluent API using TypeScript classes

    You can create an easy to chain API using TypeScript classes. Learn about the thisreturn type annota ...

  7. 【t016】邮递员

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 邮局需要你来帮助他们为某个邮递员设计出一条能够穿过那遥远乡村的所有村子和小路至少一次的邮路(输入数据将会 ...

  8. webpack run dev后并没有生成dist目录,但是浏览器里却读取了dist里的build.js?

    最近想看看现在做的React项目用的脚手架,看了下webpack的配置,尝试修改一些东西看看输出结果,结果允许npm run dev发现没有输出目录,怎么回事呢.又安装了vue官方提供的webpack ...

  9. 【23.33%】【codeforces 664C】International Olympiad

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  10. Eclipse使用技巧总结(五)

    三十五.快速回退到上次编辑处 Ctrl + Q 三十六.查看调用层次 Ctrl + Alt + H 三十七.快速查看某个类 Ctrl + Shift + T 三十八.快速定位 Ctrl + K  :首 ...