分类: 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. Linux下的命令行上网

    对于网页浏览器现在大多数人用links/elinks,对了,还有个老牌一点的文本浏览器Lynx,links/elinks也是从Lynx中fork出来的. 以上所说的虽然能字符界面来浏览网页,但是不能显 ...

  2. awk 处理

    find . -type f | awk '{print $NF}' | grep pdf$ |grep -v preview | while read A; do ls -ltr $A| awk ' ...

  3. python刷取CSDN博文访问量之四

    python刷取CSDN博文访问量之四 作者:vpoet #coding:utf-8 import requests import urllib2 import re import time def ...

  4. 【POJ 2010 Moo University-Financial Aid】优先级队列

    题目链接:http://poj.org/problem?id=2010 题意:C只牛犊,各有自己的分数score和申请的补助aid,现要选出N只(N为奇数),使得其aid的总和不超过F,且按score ...

  5. jar 查找多jar包中类的办法

    jar -tf 多个文件列表, 如jar -tf *.jar 或  jar -tf   a.jar  b.jar ,这样是无任何输出的. 解决办法为: find  . -name  "*.j ...

  6. Stones(优先队列)

    Stones Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Subm ...

  7. struts2复习(五)拦截器总结

    1. 拦截器(Interceptor): 拦截器是Struts2的核心,Struts2的众多功能都是通过拦截器来实现的. 2. 拦截器的配置 1)编写实现Interceptor 接口的类.  2)在s ...

  8. 伪元素::selection(怎么修改网页中被选中文本的样式)

    当我们用鼠标选中一段文字的时候我们会发现文字的颜色和背景色都改变了, 有时候设计给这种选中状态设计了其他的样式,那么我们怎么来自定义选中的文本的样式呢? 用::selection <p>我 ...

  9. 使用CSC.EXE编译第一个HELLO WORLD

    坐的没事,下了个C#2008,看帮助文件写了个HELLO.CS的源文件: //hello.cs //Show "Hello Word!" using system; class h ...

  10. 线程间通信的三种方式(NSThread,GCD,NSOperation)

    一.NSThread线程间通信 #import "ViewController.h" @interface ViewController ()<UIScrollViewDel ...