我想程序暂停几秒运行 并且界面不卡怎么搞啊 求助 小白 企鹅 470236189

解决方案 »

  1.   

    什么叫暂停几秒运行?是指点击之后,几秒后才处理数据,显示结果?
    直接创建一个新线程,sleep一下不就行了吗?
      

  2.   

    如果你是想在winform里面跑个for循环 然后每次循环都sleep一下 那么抱歉 UI线程阻塞 你的界面必然卡死
    你要做的是将你的任务分配给另一个线程(非UI线程)去做 然后再在里面调用sleep或者别的方式去阻塞你这个执行任务的线程
    任何时候都不要让UI线程等待
      

  3.   

    图方便的话可以用backgroundworker这个类 不过我不知道他是不是有对应的线程阻塞方法 我个人感觉他就是微软封装好了的一个线程组件
    如果想从头自己来 那你先问问自己委托理解了没 多线程理解了没 同步访问 异步访问理解了没 
      

  4.   

    不懂啊 你能不能加我企鹅 470236189 帮我看看我程序 做个demo学习学习
      

  5.   

    using System;
    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;
            }
        }
    }
      

  6.   

    仅仅是让程序暂停几秒,而且不影响界面响应速度的话,不需要用到多线程。
    在需要暂停的地方插入以下代码:
    DataTime t=DataTime.Now;
    while((DataTime.Now-t)<TimeSpan.FromSeconds(5))//程序在此处暂停5秒
    {
       Application.DoEvents();
    }
      

  7.   


    新的一个线程。
               Thread th = new Thread(new ParameterizedThreadStart(start));
                th.Start();在线程方法里面悬停线程。
    private static void start(object _obj)
            {
                Thread.Sleep(1000);
            }
      

  8.   

    我觉得在这句话: this.Invoke(new Action(() => this.label1.Text = DateTime.Now.ToString()));改成:
    this.Invoke(new MethodInvoke( new Action(() => this.label1.Text = DateTime.Now.ToString())));
    好一些,以为我以前有一次写程序的时候,没加MethodInvoke这个,发现Action执行完了之后,跳转到一个不应该在此时跳转到的地方,这是什么原因我也不知道,而且是过几次 都是这样,加了MethodInvoke之后执行才正常,听某人告诉我,这是加一个什么线程通讯的“通道”什么的,具体叫什么我也记不清楚了,后来想查也没找到合适的说明。