关于C#的线程睡眠问题

小弟用C#做一个GUI的界面,想实现一个功能,就是当我在按下一个button的时候,会修改某个控件的属性值,在修改完之后,我希望主线程睡眠1s钟时间,然后再次修改另外一个控件的属性值,
richTextBox1.Text += "正在读卡中,请稍后。。。";
System.Threading.Thread.Sleep(1000);
我希望click之后text中的内容先改变,然后睡1S后,继续执行接下去的代码,但是现在的问题是button的click事件中是等代码全部运行完之后控件的属性值才会改变,就达不到我想要的效果,请问大神们有什么办法可以实现吗?

第1个回答  2012-10-26
richTextBox1.Text += "正在读卡中,请稍后。。。";
Application.DoEvents();
System.Threading.Thread.Sleep(1000);本回答被提问者和网友采纳
第2个回答  2012-10-27
这是线程阻塞了,函数没执行完,界面不会改变的。用BackgroundWorker类可以在单独的线程上执行操作。
第3个回答  2012-10-26
用ThreadPool比较简单,可以快速的开启一个新的线程,当任务执行完以后用控件的Invoke方法在控件所在线程修改文本框的Text。

或者如果你用.net 4.0的话可以用任务并行库,并且使用控件线程的Scheduler

c# Thread.Sleep(1000); 问题
这句是让主线程睡眠1秒,当然没反映了,既睡眠又可以使用,这句话很矛盾,你要想做一件事的时候主线程还可以干别的事,那你就得新建一个子线程了 .需要知道的是,你现在在睡眠主线程。你控件不能使用说明你睡眠的是ui线程,你可以用后台线程来处理数据,ui在前台干别的事 ...

C#中关于Thread.sleep(1000)的问题!!
如果你没加判断条件哪个线程执行sleep1秒就是10个线程都sleep1秒,如果判断了就是一个线程

c# .net System.Threading.Thread.Sleep(-1) 干嘛用的?;
睡眠,休息一会儿,不占用CPU。有些循环如果没有Sleep的话会占用大量CPU资源。-1就是睡一下,等到下次来执行这个代码的时候,如果耗时超过-1毫秒,就不睡了,不sleep了,相当于sleep函数执行完成。这里的-1感觉和0一样 写成-1的,我还是第一次见。如果按照我的理解,建议还是写成0。因为windows系统是...

c#thread.sleep(0)有什么用?
Thread.Sleep(1)让当前线程主动沉睡1ms,不参与下次竞选,从而导致系统上下文切换,优先级低于原线程的线程有机会执行。总结以上,Thread.Sleep(0)与Thread.Yield()在特定条件下可让系统重新调度线程,而Thread.Sleep(1)强制当前线程进入睡眠状态,导致上下文切换。请注意,某些答案对上述知识点的理解存在错误...

C#中线程序休眠1秒怎么用?
使用Thread类的静态方法Sleep,它会让当前线程睡眠一段时间,其参数为毫秒单位,一秒是1000毫秒。

C# thread.Sleep 时长确定 线程挂起的时间是随意确定的吗,还是有什么规...
Sleep挂起只是表示这个线程将在多长时间内放弃参与CPU的,让其它相同优先级或更高优先级的线程可以参与CPU的竞争,在这段时间内,如果有其其它优先级更高的线程开始运行,并且长时间占用CPU,那你这个发起Thread.Sleep的线程即使时间到了,也很难获得CPU的控制权,导致时间与你Sleep的时间肯定是不同的,

c#thread.sleep在其他电脑不起作用
c#thread.sleep在其他电脑不起作用,有几个原因需要考虑:1、硬件性能差异:Thread.Sleep方法的参数是以毫秒为单位的时间间隔。如果您在其他电脑上设置的时间间隔非常小,而该电脑的硬件性能较低,会导致暂停时间比期望的要长。2、多核处理器调度问题:Thread.Sleep方法的实际执行时间受到操作系统的调度影响...

C#休眠的问题
你可以这样做,系统休眠的命令是“echo "standby" > \/sys\/power\/state ”Process MyProcess=new Process();\/\/设定程序名 MyProcess.StartInfo.FileName="cmd.exe";\/\/关闭Shell的使用 MyProcess.StartInfo.UseShellExecute=false;\/\/重定向标准输入 MyProcess.StartInfo.RedirectStandardInput=true...

c#关于多线程分配CPU的问题
线程中间有个sleep方法。 你肯定是做的死循环而且中间没用sleep所有导致的。循环一次一定要sleep一下。要不他一直占住CPU 在线程里面加上 System.Threading.Thread.Sleep(1000);那没办法。是你函数里面调用有问题,里面没有Sleep(1000);。把CPU一直占主了!写这个的人有点问题 ...

C# 中死锁的问题。
再没什么干扰它,它完成了后面的释放锁的工作,大家都消停了。到目前为止,第4个红框之前的事情就解释完了。紧接着类似的事情发生了,线程B像前辈线程A一样出发了,并成功锁住了lock1,但问题产生了,在它睡眠的1秒期间,主进程毫不客气地抢走了lock2,然后也去睡眠一秒。之后发生的事情就尴尬了,...

相似回答