分类: C#2014-05-28 16:57 1286人阅读 评论(0) 收藏 举报
我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作:
 
1.若是在加载之前,操作---》整个界面出来的很慢,而且若是时间长的话,页面很久才能出来,
2.若是写在加载之后处理的话,虽然界面出来了,这个时候,出现了假死的状体。但是不能乱点,一点,就有卡死的现象。
现在我们利用异步,和多线程来控制,并且加上进度条。来做一个界面加载的时候出现很大操作。
示例:
 
  1. using System.Windows.Forms;
  2. using System.Threading;
  3. using System;
  4. namespace Threaddemo1
  5. {
  6. public partial class Form1 : Form
  7. {
  8. public Form1()
  9. {
  10. InitializeComponent();
  11. }
  12. delegate void aa(string s);//创建一个代理
  13. private void Form1_Load(object sender, EventArgs e)
  14. {
  15. Thread newthread = new Thread(new ThreadStart(ttread));
  16. newthread.Start();
  17. }
  18. void ttread()
  19. {
  20. pri("77");
  21. }
  22. private delegate void ProgressBarShow(int i);
  23. private void pri(string p)
  24. {
  25. bool name = richTextBox1.InvokeRequired;
  26. //MessageBox.Show(name.ToString());
  27. if (!richTextBox1.InvokeRequired)//判断是否需要进行唤醒的请求,如果控件与主线程在一个线程内,可以写成if(!InvokeRequired)
  28. {
  29. Loadthread();
  30. }
  31. else
  32. {
  33. //   MessageBox.Show("不是同一个线程");
  34. aa a1 = new aa(pri);
  35. Invoke(a1, new object[] { p });//执行唤醒操作
  36. }
  37. }
  38. private void Loadthread()
  39. {
  40. string s = string.Empty;
  41. for (int b = 0; b < 10000; b++)
  42. {
  43. this.ShowPro(b);
  44. s += b.ToString();
  45. }
  46. //MessageBox.Show("同一线程内");
  47. LoadRichebox(s);
  48. }
  49. void send() {
  50. Thread.CurrentThread.Abort();
  51. }
  52. private void LoadRichebox(string s)
  53. {
  54. richTextBox1.Text = s;
  55. }
  56. private void ShowPro(int value)
  57. {
  58. if (this.InvokeRequired)
  59. {
  60. this.Invoke(new ProgressBarShow(ShowPro), value);
  61. }
  62. else
  63. {
  64. this.progressBar1.Value = value;
  65. this.label1.Text = value + "% Processing...";
  66. }
  67. }
  68. }
  69. }

C# 多线程 异步加载 窗体的更多相关文章

  1. Android 多线程 异步加载

    Android 应用中需要显示网络图片时,图片的加载过程较为耗时,因此加载过程使用线程池进行管理, 同时使用本地缓存保存图片(当来回滚动ListView时,调用缓存的图片),这样加载和显示图片较为友好 ...

  2. WPF 异步加载窗体

    加载某个界面时,需要获取数据,而数据返回的时间比较长,这个时候可以异步加载界面. 1.在该窗体的加载事件(Load)中编写以下代码: new Thread(p=>{DataBinding();} ...

  3. 多线程异步加载图片async_pictures

    异步加载图片 目标:在表格中异步加载网络图片 目的: 模拟 SDWebImage 基本功能实现 理解 SDWebImage 的底层实现机制 SDWebImage 是非常著名的网络图片处理框架,目前国内 ...

  4. [转]C#通过委托更新UI(异步加载)

    我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作: 1.如果是在加载之前进行其它操作,则整个界面出来的很慢,而且若是时间长的话,页面很久才能出来 ...

  5. 实例演示Android异步加载图片

    本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...

  6. 实例演示Android异步加载图片(转)

    本文给大家演示异步加载图片的分析过程.让大家了解异步加载图片的好处,以及如何更新UI.首先给出main.xml布局文件:简单来说就是 LinearLayout 布局,其下放了2个TextView和5个 ...

  7. 演化理解 Android 异步加载图片

    原文:http://www.cnblogs.com/ghj1976/archive/2011/05/06/2038738.html#3018499 在学习"Android异步加载图像小结&q ...

  8. ImageLoader实现图片异步加载

    ImageLoader是一个广泛使用的图片库,在向网络请求图片时,使用imageView和smartView常会产生outofmemory错误,这时ImageLoader可以起到很大的作用,主要有如下 ...

  9. Android异步加载图像(含线程池,缓存方法)

    研究了android从网络上异步加载图像: (1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下方法. 在主线程中new 一个Han ...

随机推荐

  1. bzoj1675 [Usaco2005 Feb]Rigging the Bovine Election 竞选划区

    Description It's election time. The farm is partitioned into a 5x5 grid of cow locations, each of wh ...

  2. Clone Graph 解答

    Question Clone an undirected graph. Each node in the graph contains a label and a list of its neighb ...

  3. FVANCOP/ChartNew.js

    FVANCOP/ChartNew.js FVANCOP/ChartNew.js

  4. Mod_python: The Long Story

    mod_python: the long story - Grisha Trubetskoy Mod_python: The Long Story Oct 25th, 2013 | Comments ...

  5. 安装配置MongoDB数据库

    一.关闭SElinux.配置防火墙 1.vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINU ...

  6. 利用Python完成一个小游戏:随机挑选一个单词,并对其进行乱序,玩家要猜出原始单词

    一 Python的概述以及游戏的内容 Python是一种功能强大且易于使用的编程语言,更接近人类语言,以至于人们都说它是“以思考的速度编程”:Python具备现代编程语言所应具备的一切功能:Pytho ...

  7. 谱聚类--SpectralClustering

    谱聚类通常会先对两两样本间求相似度. 然后依据相似度矩阵求出拉普拉斯矩阵,然后将每一个样本映射到拉普拉斯矩阵特诊向量中,最后使用k-means聚类. scikit-learn开源包中已经有现成的接口能 ...

  8. 设置Android设备在睡眠期间始终保持WLAN开启的代码实现

    MainActivity例如以下: package cc.ab; import android.os.Bundle; import android.provider.Settings; import ...

  9. 【计算几何初步-线段相交+并查集】【HDU1558】Segment set

    Segment set Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  10. ionic安装

    npm set registry http://registry.cnpmjs.org/ 设置淘宝镜像