zoukankan      html  css  js  c++  java
  • C# 多线程 异步加载 窗体

    C# 多线程 异步加载 窗体

    分类: C#

    我们在使用 windowform 编程的时候,我们或许可能会越到,各种在窗体加载的时候,会进行其他的操作:
     
    1.若是在加载之前,操作---》整个界面出来的很慢,而且若是时间长的话,页面很久才能出来,
    2.若是写在加载之后处理的话,虽然界面出来了,这个时候,出现了假死的状体。但是不能乱点,一点,就有卡死的现象。
    现在我们利用异步,和多线程来控制,并且加上进度条。来做一个界面加载的时候出现很大操作。
    示例:
     
    [csharp] view plaincopyprint?
     
    1. using System.Windows.Forms;  
    2. using System.Threading;  
    3. using System;  
    4.   
    5. namespace Threaddemo1  
    6. {  
    7.     public partial class Form1 : Form  
    8.     {  
    9.         public Form1()  
    10.         {  
    11.             InitializeComponent();  
    12.         }  
    13.         delegate void aa(string s);//创建一个代理  
    14.   
    15.         private void Form1_Load(object sender, EventArgs e)  
    16.         {  
    17.             Thread newthread = new Thread(new ThreadStart(ttread));  
    18.             newthread.Start();  
    19.         }  
    20.         void ttread()  
    21.         {  
    22.             pri("77");  
    23.         }  
    24.         private delegate void ProgressBarShow(int i);  
    25.         private void pri(string p)  
    26.         {  
    27.             bool name = richTextBox1.InvokeRequired;  
    28.             //MessageBox.Show(name.ToString());  
    29.             if (!richTextBox1.InvokeRequired)//判断是否需要进行唤醒的请求,如果控件与主线程在一个线程内,可以写成if(!InvokeRequired)  
    30.             {  
    31.                 Loadthread();  
    32.             }  
    33.             else  
    34.             {  
    35.              //   MessageBox.Show("不是同一个线程");  
    36.                 aa a1 = new aa(pri);  
    37.                 Invoke(a1, new object[] { p });//执行唤醒操作  
    38.             }  
    39.         }  
    40.   
    41.         private void Loadthread()  
    42.         {  
    43.             string s = string.Empty;  
    44.             for (int b = 0; b < 10000; b++)  
    45.             {  
    46.                 this.ShowPro(b);  
    47.                 s += b.ToString();  
    48.             }  
    49.             //MessageBox.Show("同一线程内");  
    50.             LoadRichebox(s);  
    51.         }  
    52.         void send() {  
    53.             Thread.CurrentThread.Abort();  
    54.         }  
    55.         private void LoadRichebox(string s)  
    56.         {  
    57.             richTextBox1.Text = s;  
    58.         }  
    59.         private void ShowPro(int value)  
    60.         {  
    61.             if (this.InvokeRequired)  
    62.             {  
    63.                 this.Invoke(new ProgressBarShow(ShowPro), value);  
    64.             }  
    65.             else  
    66.             {  
    67.                 this.progressBar1.Value = value;  
    68.                 this.label1.Text = value + "% Processing...";  
    69.             }  
    70.         }  
    71.     }  
    72. }  
  • 相关阅读:
    Linux常见故障及修复方法
    2019/作业
    使用net 模式上网的步骤
    2019 年 1
    处理请求数据
    REST 表现层状态转化
    @RequestMapping注解的属性,将请求约束精细化
    SpringMVC 概述
    基于XML文档的声明式事务配置
    事务@Transactional注解的属性
  • 原文地址:https://www.cnblogs.com/skyay/p/4688775.html
Copyright © 2011-2022 走看看