阻止UI线程,不显示标签消息

时间:2017-11-15 09:42:58

标签: c# multithreading

我有以下Thread方法:

public void messageDelay() 
{
    Thread.Sleep(5000); 
}

但是当我调用它时,它会传递UI界面,直到线程完成后我才能完成任何操作。

private  void Porcessing_Click(object sender, EventArgs e)
{   
    label1.Text = "start under process..";
    messageDelay();
    label1.Text = "Result";
}

这是我的主要方法。我有什么想法吗?

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要使用Asynchronous programming。对于可能阻塞的活动(例如您的活动)至关重要:

private async void Porcessing_Click(object sender, EventArgs e)
{
    label1.Text = "start under process..";
    await messageDelay();
    label1.Text = "Result";
}

public async Task messageDelay()
{
    await Task.Delay(5000);
}

请注意async一直使用{}。同时检查https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

答案 1 :(得分:0)

您可以使用saver = tf.train.Saver() with tf.Session() as sess: sess.run(tf.global_variables_initializer()) saver.restore(sess, tf.train.latest_checkpoint('./')) ... 。此类创建另一个线程,因此UI线程不会阻塞。例如:

BackgroundWorker