c# 怎么延时等待 一个耗时操作的返回 new Thread(() => { object result = 耗时函数();//用result干其他事 }).Start(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 await Task.Factory.StartNew(你的代码); //System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(一些长期任务)); //System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(另一个长期任务)); private void 一些长期任务(Object state) { // 插入代码来执行一项艰巨的任务。 this.Invoke(new Action(() => { resultLabel.Text = "0"; })); int aa = 100; do { System.Threading.Thread.Sleep(1000); this.Invoke(new Action(() => { resultLabel.Text = (int.Parse(resultLabel.Text) + 1).ToString(); })); } while (--aa > 0); } private void 另一个长期任务(Object state) { // 插入代码来执行一项艰巨的任务。 }我学编程是漫不经心的以上也是不久前学的例子看能否作参考 http://bbs.csdn.net/topics/390900344 http://www.blogjava.net/sitinspring/archive/2007/06/28/126809.html“使用回调和线程处理一个耗时响应过程”偶还没有学习理解。 延迟时间的方法 private void Frm_Main_Load(object sender, EventArgs e) { Thread th = new Thread(//创建线程对象 () =>//使用Lambda表达式 { while (true)//无限循环 { Invoke(//在窗体线程中执行 (MethodInvoker)(() =>//使用Lambda表达式 { txt_Time.Text =//显示系统时间 DateTime.Now.ToString("F"); })); Thread.Sleep(1000);//线程挂起1000毫秒 } }); th.IsBackground = true;//设置线程为后台线程 th.Start();//开始执行线程 } WinForm吧? 在循环里加Application.DoEvents() BackgroundWorker 这东西能满足你的需求吧? 一个简单的异步回调示例:public void BeginTransfer(EnumFtpControl ctrl, Action endCallback) { .... Task transferTask = new Task(transferAction, TaskCreationOptions.LongRunning); transferTask.ContinueWith(lastTask => { if (TransferState != EnumTransferState.Aborting) endCallback(); TransferState = EnumTransferState.Standby; }); transferTask.Start(); TransferState = EnumTransferState.Transferring; }TransferPacker.Instance.BeginTransfer(BasicConfig.EnumFtpControl, () => { logger.Info("FTP - 传输已经完成(SeqID:{0})", SeqID); TestStoped(); }); 最简单的方法:async/await(需要C# 5.0)。async/await的好处在于编写异步方法的逻辑顺序和同步方法的逻辑顺序是一致的,非常容易理解。 // 将按钮的Click事件处理函数声明成async的 private async void button1_Click(object sender, EventArgs e) { int result = await TimeConsumingMethodAsnyc(1); MessageBox.Show(result.ToString()); } // 用async方法包装耗时函数 private async Task<int> TimeConsumingMethodAsnyc(int arg) { return await Task.Run(() => TimeConsumingMethod(arg)); } // 耗时函数 private int TimeConsumingMethod(int arg) { Thread.Sleep(10000); // 模拟耗时过程 return arg; // 有返回值 } .NET Framework的异步编程模式主要有三种,基于任务的异步模式(TAP)是建议的方法,C# 5.0引入的async/await使得TAP模式的易用性极大的提高了。关于.NET Framework的异步编程模式,请参看http://msdn.microsoft.com/zh-cn/library/jj152938(v=vs.110).aspx 肯定是异步操作,使用多线程的了。使用委托和事件都行,目的都是只有一个:在耗时操作结束前,当前线程应该处理自己的业务逻辑。耗时操作完毕后返回参数,通过某种方式通知当前线程,当前线程执行后续逻辑。本人昨天做的一个很类似的小功能,使用BackgroundWorker实现的,感觉非常完美。可以参考MSDN或者找我交流下,要源码。 http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(v=vs.110).aspx Winform ToolStripPanel中,包含多个ToolStrip控件的排序问题。 关于picturebox显示大图片的,滚动条的问题 发布的网站如何获取服务器上绝对路径下的图片 这段代码看不懂。。 VB 反射技术 调用的目标发生异常 有懂c#又懂vb的人吗? 如何判断本机是公网,还是内网?? 在web应用程序里怎样做出类似资源管理器,文件夹树的效果?相当于应用程序里面的TreeView 奇怪的问题?关于listbox赋值 dll中没有命名空间就不能引用吗? WPF 一个简易的进度条。程序运行过程中,界面一直没反应,求帮解决。谢谢! WPF对象方法使用不匹配
{
// 插入代码来执行一项艰巨的任务。
this.Invoke(new Action(() => { resultLabel.Text = "0"; }));
int aa = 100;
do
{
System.Threading.Thread.Sleep(1000);
this.Invoke(new Action(() => { resultLabel.Text = (int.Parse(resultLabel.Text) + 1).ToString(); }));
} while (--aa > 0);
} private void 另一个长期任务(Object state)
{
// 插入代码来执行一项艰巨的任务。
}
我学编程是漫不经心的以上也是不久前学的例子看能否作参考
“使用回调和线程处理一个耗时响应过程”偶还没有学习理解。
private void Frm_Main_Load(object sender, EventArgs e)
{
Thread th = new Thread(//创建线程对象
() =>//使用Lambda表达式
{
while (true)//无限循环
{
Invoke(//在窗体线程中执行
(MethodInvoker)(() =>//使用Lambda表达式
{
txt_Time.Text =//显示系统时间
DateTime.Now.ToString("F");
}));
Thread.Sleep(1000);//线程挂起1000毫秒
}
});
th.IsBackground = true;//设置线程为后台线程
th.Start();//开始执行线程
}
public void BeginTransfer(EnumFtpControl ctrl, Action endCallback)
{
....
Task transferTask = new Task(transferAction, TaskCreationOptions.LongRunning);
transferTask.ContinueWith(lastTask =>
{
if (TransferState != EnumTransferState.Aborting)
endCallback();
TransferState = EnumTransferState.Standby;
}); transferTask.Start();
TransferState = EnumTransferState.Transferring;
}TransferPacker.Instance.BeginTransfer(BasicConfig.EnumFtpControl, () =>
{
logger.Info("FTP - 传输已经完成(SeqID:{0})", SeqID);
TestStoped();
});
// 将按钮的Click事件处理函数声明成async的
private async void button1_Click(object sender, EventArgs e)
{
int result = await TimeConsumingMethodAsnyc(1);
MessageBox.Show(result.ToString());
} // 用async方法包装耗时函数
private async Task<int> TimeConsumingMethodAsnyc(int arg)
{
return await Task.Run(() => TimeConsumingMethod(arg));
} // 耗时函数
private int TimeConsumingMethod(int arg)
{
Thread.Sleep(10000); // 模拟耗时过程
return arg; // 有返回值
}