新建WinFrom项目,在界面上添加两个按钮
分别用Thread和Task实现进度条效果
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//普通Thread实现进度条
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine("主线程开始");
new Thread(DoProcessing).Start(); //没有使用线程池,每次调用都开启新线程
//ThreadPool.QueueUserWorkItem(DoProcessing);//使用线程池,重复开启的时候回去线程池拿空闲的线程
Console.WriteLine("主线程结束");
}
//在方法上加上 async
private async void button2_Click(object sender, EventArgs e)
{
await UpdateUi2();
//async.await的语法糖为我们带来了更好的异步编程体验
}
#region Thread
void UpdateUi(int percent)
{
//UI操作
button1.Text = string.Format("{0}%", percent);
}
void DoProcessing(object obj)
{
for (int i = 0; i <= 5; ++i)
{
Thread.Sleep(500);
Console.WriteLine("---------- " + i);
Action<int> updateUi = new Action<int>(UpdateUi);
this.Invoke(updateUi, i);
}
}
#endregion
#region task,async,await
private static int _percent = 0;
int DoProcessing2()
{
Console.WriteLine("Thread id in DoProcessing: {0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(500);
return ++_percent;
}
async Task UpdateUi2()
{
_percent = 0;
button1.Text = string.Format("{0}%", 0);
while (_percent < 5)
{
//await起到释放主线程的作用
int percent = await Task.Run(() => DoProcessing2());
//在子线程处理完成后,又请求主线程继续下面的代码,下面的代码相当于Thread的回调
button2.Text = string.Format("{0}%", percent);
}
}
#endregion
#region 参考
private void button3_Click(object sender, EventArgs e)
{
Thread.Sleep(3000); //堵塞主线程
button1.Text = string.Format("99%");
}
#endregion
}
}
分享到:
相关推荐
winform垂直进度条C井winform垂直进度条C井 winform垂直进度条C井
C# Winform圆形进度条(改良版)从csdn下载,增加了圆形进度值文字显示。GDI+绘制,效率高。
winform竖向进度条,winform竖向进度条
在主窗体耗时方法体内调用,弹出进度窗体。调用4步骤 1.ProgressBarService.CreateBarForm("计划导出", "数据就绪,准备导出数据...", count); //创建进度窗口并写入提示文字 2.ProgressBarService....
C# WinForm中进度条的实现方法,有需要的赶快来下啊,希望对你有帮助哦,相互学习哈
Winform自定义进度条,多种样式的控件类库,可直接调用。
可以自定义进度条的背景颜色 帖子地址:https://blog.csdn.net/qq_38693757/article/details/125424168
BackgroundWorker实现WinForm异步操作的例子
C# winform的进度条ProgressBar的简单实现,下载后可直接运行
winform 线程实现进度条简单的操作 适合winform初学者学习!都来看看吧!
winform异步进度条LongTime,运用到回调函数
在WinForm中,比如一些文件传输和一些费时的操作,如果处理不好就会造成“假死”的情况,为此我们可以采用进度条进行友好提示。 BackgroundWorker类是.net 2.0里新增加的一个类,对于需要长时间操作而不需要用户长...
利用委托+线程实现的超简单进度条控件 自带开始 停止 继续 终止 再次开始等方法 调用者只要赋值一个任务委托即可实现实时进度条更新操作
C#winform 自定义控件实现圆形进度条和环形进度条控件,vs2017开发,可直接编译运行,用于进度显示,详细的去看博客介绍。
C# Winform垂直进度条控件实例,含控件源码VerticalProgressBar
利用backgroundworker实现进度条
gif 进度条; winform 进度条,亮的动态加载进度条,可以放到pictrueBox,展示加载进图的图片;
利用BackGroundWorker实现在线程中处理进度,并弹出视窗显示当前进度
此进度条 用户可以自定义设置前景和背景的样式(纯色,渐变,图案,图片),可以设置颜色,透明度(图片无法设置透明度)。进度有Value和MaxValue控制。具有事件ValueChange和Finish。
winform进度条,用委托的方式实现,进度条为长条形