原文: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. C++ 如何快速清空vector以及释放vector内存?

    平时我们在写代码时候,有思考过要主动去释放vector的内存吗? 1.对于数据量不大的vector,没有必要自己主动释放vector,一切都交给操作系统. 2.但是对于大量数据的vector,在vec ...

  2. Activity“ 阻止自动弹出软键盘”的方法 -尤其是对于Tab页下的!

    我的activity是Tab页签下的~! 所以应把代码加在继承于TabActivity的那个activity中!!而不是由点击Tab页启动的那个activity <activity androi ...

  3. Android 长按事件和短按事件同时响应

    在长按事件中的return false 改为return true就可以解决这个问题

  4. 【poj1442】Black Box

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10890   Accepted: 4446 Description Our ...

  5. Android Activity 悬浮 半透明边框

    1.首先来创建一个Activity,在Activity的OnCreate函数里面我们设置它为全屏,然后设置Activity的宽高为全屏*0.9,然后设置背景图片为半透明的 .9 图片 .这样就已经是非 ...

  6. WPF入门(四)->线形区域Path内容填充之填充图(ImageBrush)

    原文:WPF入门(四)->线形区域Path内容填充之填充图(ImageBrush) 前面我们提到了LinearGradientBrush可以用来画渐变填充图,那么我们同时也可以使用ImageBr ...

  7. RGB 的调色

    通过 RGB 三通道所占比的组合(通过三元素长的元组存储),可呈现丰富的色彩样式: [0, 0, 0] ⇒ 黑色,[1, 1, 1] ⇒ 白色 [1, 0, 0] ⇒ 红色,[0, 1, 0] ⇒ 绿 ...

  8. 快速删除 jar 里面的 BuildConfig.class

    快速删除 jar 里面的 BuildConfig.class 起因:多个 jar 包里面的 BuildConfig.class 文件导致编译冲突. 方法一:土方法 使用 jar 解包 jar xf x ...

  9. 数据集成工具Teiid Designer的环境搭建

    由于实验室项目要求的关系,看了些数据汇聚工具 Teiid 的相关知识.这里总结下 Teiid 的可视化配置工具 Teiid Designer 的部署过程. 背景知识 数据集成是把不同来源.格式.特点性 ...

  10. DapperPoco

    DapperPoco -- 基于Dapper的.轻量级的.高性能的.简单的.灵活的ORM框架 为什么要重复造轮子 因为现有的轮子都在某些方面不太令我满意,下面我来一一点评一下,欢迎拍砖. Entity ...