winform异步进度条LongTime
winform异步进度条LongTime,运用到回调函数
定义事件的参数类:
namespace LongTime.Business
{
// 定义事件的参数类
public class ValueEventArgs
: EventArgs
{
public int Value { set; get;}
} // 定义事件使用的委托
public delegate void ValueChangedEventHandler( object sender, ValueEventArgs e); class LongTimeWork
{
// 定义一个事件来提示界面工作的进度
public event ValueChangedEventHandler ValueChanged; // 触发事件的方法
protected void OnValueChanged( ValueEventArgs e)
{
if( this.ValueChanged != null)
{
this.ValueChanged( this, e);
}
} public void LongTimeMethod()
{
for (int i = ; i < ; i++)
{
// 进行工作
System.Threading.Thread.Sleep(); // 触发事件
ValueEventArgs e = new ValueEventArgs() { Value = i+};
this.OnValueChanged(e);
}
}
}
}
WINFORM后台代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} // 进度发生变化之后的回调方法
private void workder_ValueChanged(object sender, Business.ValueEventArgs e)
{
System.Windows.Forms.MethodInvoker invoker = () =>
{
this.progressBar1.Value = e.Value;
}; if (this.progressBar1.InvokeRequired)
{
this.progressBar1.Invoke(invoker);
}
else
{
invoker();
}
} private void button1_Click(object sender, EventArgs e)
{
// 禁用按钮
this.button1.Enabled = false; // 实例化业务对象
LongTime.Business.LongTimeWork workder = new Business.LongTimeWork(); workder.ValueChanged += new Business.ValueChangedEventHandler(workder_ValueChanged); // 使用异步方式调用长时间的方法
Action handler = new Action(workder.LongTimeMethod);
handler.BeginInvoke(
new AsyncCallback(this.AsyncCallback),
handler
);
} // 结束异步操作
private void AsyncCallback(IAsyncResult ar)
{
// 标准的处理步骤
Action handler = ar.AsyncState as Action;
handler.EndInvoke(ar); MessageBox.Show("工作完成!"); System.Windows.Forms.MethodInvoker invoker = () =>
{
// 重新启用按钮
this.button1.Enabled = true;
}; if (this.InvokeRequired)
{
this.Invoke(invoker);
}
else
{
invoker();
}
} }

http://download.csdn.net/detail/yekeyishuo/6485957
winform异步进度条LongTime的更多相关文章
- (四十一)c#Winform自定义控件-进度条
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- (四十二)c#Winform自定义控件-进度条扩展
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- win10 uwp 异步进度条
本文主要讲我设计的几个进度条,还有如何使用异步控制进度条,如何使用动画做进度. 进度条可以参见:http://edi.wang/post/2016/2/25/windows-10-uwp-modal- ...
- 关于C# WinForm中进度条的实现方法
http://www.cnblogs.com/Sue_/articles/2024932.html 进度条是一个软件人性化考虑之一,他给用户的感觉就是程序内部在不停的动作,执行到了什么程度,而不是整个 ...
- (七)c#Winform自定义控件-进度条
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. 开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control ...
- C# winform带进度条的图片下载
代码如下: public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } private void ...
- c# 异步进度条组件BackgroundWorker
//控件事件调用DoWork()方法就行. #region 进度条 private BackgroundWorker worker = null; private void DoWork(string ...
- C#winform使用进度条
在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口很容易假死(无法适时看到进度信息 ...
- asp.net XMLHttpRequest 进度条以及lengthComputable always false的解决办法
一直用ajax好长时间了,对其原理也有一些了解,最近由于项目需要,使用ajax异步进度条的效果,就研究了一下,用原生的XMLHttpRequest实现进度条函数,XMLHttpRequest有以下函数 ...
随机推荐
- C# MDI 子窗体被父窗体控件挡住
using System.Runtime.InteropServices; [DllImport("user32")] public static extern int SetPa ...
- DIV中的垂直居中
<div style="border:0px #ff0000 solid; width:100px;height:380px; line-height:380px; float:lef ...
- ARM汇编常用指令
RAM汇编常用指令有MOV B BL LDR STR
- Excel定位对象(按钮等)
手头只有2003,2007应该类似首先显示控件工具箱,进入设计模式.然后按Ctrl+G,在定位条件里选对象,确定.此时所有空间即被选中,按del可删除之.
- ifconfig报错:SIOCSIFFLAGS: Operation not permitted
# insmod mt7601Usta.ko rtusb init rt2870 --->usbcore: registered new interface driver rt2870 # iw ...
- js延迟加载,提升网页加载速度
JS延迟加载,简单例子,不多说: 代码如下: 程序代码 <script language="JavaScript" src="" id="my& ...
- 黄聪:wordpress后台加载ajax.googleapis.com导致打开速度很慢的解决方案
打开wordpress后台,发现很卡,通过开发者工具看到是因为加载http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothn ...
- HDU 3652 B-number(数位dp)
题意:B数的定义是有字符串“13”且能被整数13整除的数,求[1,n]内的B数个数. 题解:这是数位DP,我也就是刚入门,前两天看到了非递归写法,好麻烦.所以我建议写dfs的方法,容易理解,代码还简短 ...
- linux命令(9)设定固定ip
一.使用命令设置ubuntu的ip地址 1.修改配置文件blacklist.conf禁用IPV6: sudo vi /etc/modprobe.d/blacklist.conf 2.在文档最后添加 b ...
- 问对于一个给定的n,怎样才能用最少的步骤将它变到1
如果n为偶数,则将它除以2,如果n为奇数,则将它加1或者减1.问对于一个给定的n,怎样才能用最少的步骤将它变到1.例如:n= 61n-- 60n/2 30n/2 15n++ 16n/2 8n/2 4n ...