c# 刷新界面

简介: 引用:http://blog.csdn.net/deepwishly/article/details/5500051 这个问题也不知道难倒了多少C#豪杰。比起MFC的界面刷新,在WINFORM中来实现多线程刷新真是很痛苦,故写此文。

引用:http://blog.csdn.net/deepwishly/article/details/5500051

这个问题也不知道难倒了多少C#豪杰。比起MFC的界面刷新,在WINFORM中来实现多线程刷新真是很痛苦,故写此文。

多线程刷新界面主要用到多线程,委托,线程安全、事件等一系列高难度的C#操作。

关于委托和事件,这有一篇很易懂的文章:hi.baidu.com/anglecloudy/blog/item/a52253ee804d052f2df534ab.html

===============================================

先从一个简单的例子说起,是一个没有考虑线程安全的写法:

先在一个FORM类里面定义一个委托和事件:

  protected delegate void UpdateControlText1(string str);
        //定义更新控件的方法
        protected void updateControlText(string str)
        {
            this.lbStatus.Text = str ;
            return;
        }

在线程函数里面加上下面的内容

UpdateControlText1 update = new UpdateControlText1(updateControlText);//定义委托
this.Invoke(update, "OK");//调用窗体Invoke方法

这个线程函数必须是类的线程函数,这样用很方便,但有很高的局限性,下面来说个复杂的。

==============================================

先定义一个独立的类

public class MoreTime
    {
        
public delegate void InvokeOtherThead( int i);//委托

        
public InvokeOtherThead MainThread;//事件

        
public void WaitMoreTime()
        {
            
            
for ( int i = 0 ; i < 20 ;i ++ )
            {
                Thread.Sleep(
 2000 );
                
                MainThread(i);//调用事件
            }
        }
    }

主函数

public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent();
        }

        
private void button1_Click( object sender, EventArgs e)
        {
            MoreTime mt 
= new MoreTime();
            mt.MainThread 
= new MoreTime.InvokeOtherThead(AddToList); //事件响应
            ThreadStart start 
= new ThreadStart(mt.WaitMoreTime);//起动线程
            Thread thread 
= new Thread(start);
            thread.Start();
        }

        
public void AddToList( int i)   //事件响应函数
        {
            
if ( this .listBox1.InvokeRequired)
            {
                MoreTime mt 
= new MoreTime();
                mt.MainThread 
= new MoreTime.InvokeOtherThead(AddToList);

                
this .Invoke(mt.MainThread, new object [] { i});

            }
            
else 
            {
                listBox1.Items.Add(i.ToString());   //这里一定要是可以瞬时完成的函数
            }
        }
    }

相关文章
|
C#
C# ListView 列宽调整 刷新
/*********************************************************************** * C# ListView 列宽调整 刷新 * 说明: * 记录将C#中的ListView列宽设置为自动调整。
1083 0
|
1月前
|
C#
24. C# 编程:用户设定敌人初始血值的实现
24. C# 编程:用户设定敌人初始血值的实现
22 0
|
2月前
|
SQL 数据库连接 应用服务中间件
C#WinForm基础编程(三)
C#WinForm基础编程
78 0
|
2月前
C#WinForm基础编程(二)
C#WinForm基础编程
59 0
|
2月前
|
C# 数据安全/隐私保护
C#WinForm基础编程(一)
C#WinForm基础编程
62 0
|
4月前
|
数据采集 前端开发 C#
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频
Twitter是全球最大的社交媒体平台之一,包含丰富的音频资源。用户可以在Twitter上发布、转发、评论和收听各种音频内容,如音乐、播客、新闻、故事等,直接从Twitter抓取音频数据并非易事,尤其是在考虑到可能的封锁和反爬虫机制。Twitter会对频繁访问的IP地址进行限制或封禁,以防止恶意爬虫的行为。因此,我们需要使用一些技术手段来规避这些障碍,确保稳定而高效的数据访问。
C#编程艺术:Fizzler库助您高效爬取www.twitter.com音频
|
3月前
|
程序员 C#
深入理解 C# 编程:枚举、文件处理、异常处理和数字相加
枚举是一个特殊的“类”,表示一组常量(不可更改/只读变量)。 要创建枚举,请使用 enum 关键字(而不是 class 或 interface),并用逗号分隔枚举项:
38 0
|
5天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
5天前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。