gpt4 book ai didi

c# - 两个线程之间的交互

转载 作者:行者123 更新时间:2023-11-30 19:07:05 27 4
gpt4 key购买 nike

我正在开发一个 winform 应用程序,我的目标是让我的表单上的标签对用户可见,三秒钟后让标签不可见。这里的问题是超时三秒。老实说,我不知道这是否是解决我的问题的正确方法,但我能够通过创建一个新线程并让新线程休眠三秒钟来完成这项工作(System.Threading.Thread.Sleep(3000)) .

我不能使用 System.Threading.Thread.Sleep(3000) 因为这会使我的 GUI 卡住 3 秒!

private void someVoid()
{
lbl_authenticationProcess.Text = "Credentials have been verified authentic...";

Thread sleepThreadStart = new Thread(new ThreadStart(newThread_restProgram));
sleepThreadStart.Start();

// Once three seconds has passed / thread has finished: lbl_authenticationProcess.Visible = false;
}

private void newThread_restProgram()
{
System.Threading.Thread.Sleep(3000);
}

所以,回到我最初的问题。我如何确定(从我的主线程)新线程何时完成,这意味着已经过去了三秒钟?

我对新想法持开放态度,而且我确信有很多。

最佳答案

现在,您正在阻塞整个 UI 线程,以便在 3 秒后隐藏标签。如果这就是您想要的,那么只需在表单中使用 Thread.Sleep(3000) 即可。如果没有,那么您最好使用 Timer:

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 3000;
timer.Tick += (s, e) => { this.lbl_authenticationProcess.Visible = false; timer.Stop(); }
timer.Start();

3 秒后,标签将消失。不过,在您等待期间,用户仍然可以与您的应用程序进行交互。

请注意,您必须使用 Timer 的表单版本,因为它的 Tick 事件是在 UI 线程上引发的,允许直接访问控制。其他计时器可以工作,但与控件的交互必须是Invoke/BeginInvoked。

关于c# - 两个线程之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285999/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com