Thread.Sleep没有冻结Framework 2.0的UI

时间:2015-03-24 18:23:10

标签: c# .net

在我的程序中,我有2个线程,第一个是不断运行while (isRunning) {

对于第二个线程方法,我需要它睡一会儿,而它是真的。 我在当前代码中面临的问题是我在任务管理器中为我的程序获得Not Responding

我如何解决这个问题,请注意我使用的是Framework 2.0。

private void initialize() {
        MyWeb.connectToServer();
        commandThread = new Thread(checkForCommandThread); // The thread that I need not to freeze the program
        commandThread.Start();
    }

private void checkForCommandThread() {
        while (isRunning) {
            Thread.Sleep(10000);
            // while this thread is sleeping, the program should not be frozen
            // do the work here, after the sleep
        }
    }

2 个答案:

答案 0 :(得分:0)

我的程序似乎得到了这个Not Responding,因为我所拥有的另一个线程,它一直在运行,没有任何Sleep,并且运行得尽可能快,因此制作程序Not Responding并使用高达13%的CPU ......

一个简单的Thread.Sleep(10);修复了所有内容

答案 1 :(得分:-1)

好的,假设你有这样的代码

    public static bool _isRunning = false;

    private void button1_Click(object sender, EventArgs e)
    {
        _isRunning = true;
        var thread = new Thread(DoWork) {IsBackground = true};
        thread.Start();

        while (_isRunning)
        {
            //HERE GOES THE MAGIC
            Application.DoEvents();
        }
    }

    private static void DoWork()
    {
        System.Threading.Thread.Sleep(20000);
        _isRunning = false;
    }