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#WinForm实现Loading等待界面
上篇博客中解决了程序加载时屏幕闪烁的问题。 但是,加载的过程变得很缓慢。 这个给用户的体验也不是很好,我这里想加一个Loading的进度条。 项目启动的时候,加载进度条,界面UI加载完毕,进度条消失。
934 0
|
8月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
1064 27
|
编解码 C# 数据库
C# + WPF 音频播放器 界面优雅,体验良好
【9月更文挑战第18天】这是一个用 C# 和 WPF 实现的音频播放器示例,界面简洁美观,功能丰富。设计包括播放/暂停按钮、进度条、音量控制滑块、歌曲列表和专辑封面显示。功能实现涵盖音频播放、进度条控制、音量调节及歌曲列表管理。通过响应式设计、动画效果、快捷键支持和错误处理,提升用户体验。可根据需求扩展更多功能。
556 3
|
Android开发 iOS开发 C#
Xamarin.Forms:从零开始的快速入门指南——打造你的首个跨平台移动应用,轻松学会用C#和XAML构建iOS与Android通用界面的每一个步骤
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程并保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用演示了 Xamarin.Forms 的基本功能和工作原理。
573 1
|
存储 前端开发 C#
WPF/C#:更改界面的样式
WPF/C#:更改界面的样式
263 0
|
SQL 安全 C#
SQL数据库学习之路(练习)---C#登录界面连数据库
目录 C#登录界面连数据库 一、在数据库中先创建一个数据库。 二、在VS中创建C#的windows窗体应用程序 三、在VS中连接到数据库 四、设计登录界面 五、设置注册界面 六、将form1的按钮和form2进行关联 七、设置form2界面的注册按钮 八、form1的登录按钮设置 九、运行成果 参考文章: C#登录界面连数据库 一、在数据库中先创建一个数据库。
3393 0
|
存储 传感器 监控
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
1031 0
|
数据可视化 C# 图形学
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
【Unity 3D】图形界面GUI的讲解及在C#中实现用户登录界面的实战(附源码)
629 0
|
API C# 数据安全/隐私保护
ApeForms | C# WinForm 界面弹出消息通知栏 (仿Win10系统通知栏)
消息通知栏(Notification)在桌面开发中有非常重要的作用,它是一种全局的、强制的交互方式。它可以在活动窗体之外的区域向用户发出醒目的消息提示,允许用户在指引下通过简易的操作完成交互。ApeForms中提供的消息通知栏是在系统通知栏之外单独实现的一套通知功能,开发者可以自定义通知栏的内容、添加自定义的选项并设置动作回调、设置消失时间等。
1512 0
ApeForms | C# WinForm 界面弹出消息通知栏 (仿Win10系统通知栏)