//这个问题也不知道难倒了多少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#中利用多线程来更新用户界面。在Windows Forms或WPF应用程序中,主线程通常负责处理UI事件,而当主线程被其他长时间运行的任务占用时,用户界面就会变...
本文将深入探讨如何在C# WinForm中利用多线程实现界面快速刷新。 首先,我们需要理解Windows Forms(WinForm)应用程序的基础架构。默认情况下,WinForm应用程序有一个主线程,负责处理所有UI事件,如用户交互和...
1、测试调用委托时BeginInvoke和Invoke的表现差异 2、System.Timers.Timer多线程刷新界面 3、System.Threading.ThreadPool多线程刷新界面 4、System.Threading.Thread多线程刷新界面
下面我们来讨论如何在 WinForm 中使用 C# 实现多线程编程并更新界面(UI)。 多线程编程 多线程编程是一种使应用程序可以同时执行多个任务的技术。它可以提高应用程序的响应速度和用户体验。在 WinForm 中,我们...
它们在多线程编程中用于传递方法调用,实现异步操作。 - 委托可以视为事件处理器,因为它们允许你将一个方法作为参数传递给另一个方法。 4. **Invoke/BeginInvoke方法** - `Control.Invoke`:用于在UI线程上执行...
在C# WinForm应用开发中,我们经常遇到需要在后台执行耗时操作,同时保持用户界面(UI)的响应性。这就是异步编程的核心应用场景。VS2013支持.net框架4.0,该版本引入了Task类和异步编程模型,使得处理这种需求变得...
C#多线程中子线程动态改变UI控件 在桌面应用程序中,控制UI界面是一个非常重要的任务。特别是在C#多线程编程中,子线程更新UI控件是一个常见的问题。本文将总结C#子线程更新UI控件的方法,介绍两种常用的方法,以便...
本文将深入探讨C#中的多线程机制,包括线程互斥与同步,以及如何在WPF主界面中安全地更新UI。 首先,让我们理解什么是多线程。多线程是指一个应用程序内同时运行多个独立的执行线程。在C#中,可以使用`System....
"C#多线程实现进度条操作" 在C#中实现多线程例子时,经常会遇到一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示。在运行中...
`BackgroundWorker`是.NET Framework提供的一种简单机制,用于在后台线程上执行计算密集型任务,同时允许主线程继续处理用户界面事件。这样,即使在进行长时间运行的任务时,用户界面仍然保持响应。 首先,让我们看...
在C#编程中,线程安全性和多线程交互是一个重要的主题。特别是在Windows Forms或WPF应用程序中,UI(用户界面)元素通常由主线程创建并管理,而其他后台线程可能需要与这些UI元素进行交互。这涉及到跨线程访问控件的...
在本话题中,我们将深入探讨如何使用QT库来实现多线程进度条的刷新。 QT是一个功能强大的C++库,它为开发者提供了丰富的工具和类,用于构建跨平台的桌面和移动应用程序。在QT中,我们可以利用QThread类来创建和管理...
在c#中使用多线程很方便只需要使用System.Threading.Thread的一个实例的Start方法就行了,但是如何实现多线程之间的交互就不是那么简单。本文实现了用子线程去处理数据,并实时更新主线程的ui状态了。下面就开始一...
总结来说,"C#多线程实时显示系统时间"项目是一个实用的教学案例,它涵盖了多线程的创建、UI同步以及定时任务的实现。通过这个项目,开发者可以学习到如何在C#中有效地利用多线程提高程序性能,并理解如何安全地更新...
在C#编程中,WinForms应用通常依赖于一个单一的用户界面(UI)线程来处理所有的界面更新和用户交互。这种设计模式虽然简单,但当UI线程被长时间运行的任务阻塞时,就会出现标题中提到的问题:界面卡顿、控件响应慢,...
最近项目用到一个需要实时刷新控件数据的功能,为此我研究了大量的方法,最后选择使用INotifyPropertyChanged类来解决问题,可以大大降低UI层和数据库的压力 让我们项目中的实体类来继承实现INotifyPropertyChanged...
标题中提到的“解决winform编程中使用线程界面卡死的案例”,主要是指通过创建后台线程来执行那些可能使UI卡死的操作,从而避免阻塞主线程。描述中提到了“用了委托”,这是在.NET框架中进行跨线程操作的关键技术。 ...
在本话题中,我们将深入探讨如何实现GridView的动态绑定数据集以及如何在多线程环境下安全地更新UI,同时监控运行状态。 首先,动态绑定数据集是GridView的一个关键特性,允许我们根据需要实时加载和显示数据。在C#...
总结来说,这个C#下多线程实现实例的图形化排序算法演示程序,涵盖了C#多线程编程、图形用户界面设计、排序算法以及事件处理机制等多方面的知识点,为学习和掌握.NET平台下的多线程应用开发提供了一个很好的范例。