我想程序暂停几秒运行 并且界面不卡怎么搞啊 求助 小白 企鹅 470236189
解决方案 »
- IDbCommand.Prepare()后命令只执行一次,那么Prepare()方法还有用吗
- winform,生成应用程序,怎么避免重复打开窗口。
- pictureBox的背景透明问题???
- 对比二个DataSet有不相同的行,则删除DataSet1与DataSet2不相同的行,如何做?
- TreeView控件 + iframe 产生的问题?
- 如何取消重绘???
- 怎么知道C# Windows appliction运行时需要那些动态库?
- 动态库如何引用?
- 如何获取panel上滚动条的位置,也就是说怎么知道滚动条滚动了多少?
- 100分求救! 有点难!~~ 不够再加!
- 如何查看系统API函数
- qq,360这些软件的UI是用什么技术实现的?
直接创建一个新线程,sleep一下不就行了吗?
你要做的是将你的任务分配给另一个线程(非UI线程)去做 然后再在里面调用sleep或者别的方式去阻塞你这个执行任务的线程
任何时候都不要让UI线程等待
如果想从头自己来 那你先问问自己委托理解了没 多线程理解了没 同步访问 异步访问理解了没
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace csdnWinform
{
public partial class Form1 : Form
{
private int _sleepCount = 0; public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//非UI线程执行耗时操作(这里是更新UI上的Label 显示当前精确时间)
var timeThread = new Thread(() =>
{
while (true)
{
//休眠1秒 模拟操作 这里相当于秒表
Thread.Sleep(1000);
//这里是外部定义的线程休眠时间 默认情况下_sleepCount为0 所以会忽略这个停顿
Thread.Sleep(this._sleepCount);
//重置线程休眠时间
this._sleepCount = 0;
if (label1.InvokeRequired)
{
this.Invoke(new Action(() => this.label1.Text = DateTime.Now.ToString()));
}
else
{
this.label1.Text = DateTime.Now.ToString();
}
}
});
timeThread.IsBackground = true;
timeThread.Start();
} private void button1_Click(object sender, EventArgs e)
{
int sleepCount = 0;
if (!int.TryParse(textBox1.Text,out sleepCount))
{
MessageBox.Show("Sleep Count Illeadge");
return;
}
//修改全局_sleepCount变量 这样在任务线程里面也就会有指定时间的休眠
_sleepCount = sleepCount * 1000;
}
}
}
在需要暂停的地方插入以下代码:
DataTime t=DataTime.Now;
while((DataTime.Now-t)<TimeSpan.FromSeconds(5))//程序在此处暂停5秒
{
Application.DoEvents();
}
新的一个线程。
Thread th = new Thread(new ParameterizedThreadStart(start));
th.Start();在线程方法里面悬停线程。
private static void start(object _obj)
{
Thread.Sleep(1000);
}
this.Invoke(new MethodInvoke( new Action(() => this.label1.Text = DateTime.Now.ToString())));
好一些,以为我以前有一次写程序的时候,没加MethodInvoke这个,发现Action执行完了之后,跳转到一个不应该在此时跳转到的地方,这是什么原因我也不知道,而且是过几次 都是这样,加了MethodInvoke之后执行才正常,听某人告诉我,这是加一个什么线程通讯的“通道”什么的,具体叫什么我也记不清楚了,后来想查也没找到合适的说明。