提问人:user16567291 提问时间:5/26/2022 更新时间:5/27/2022 访问量:411
C# 网络。框架 2.0 |耽误时间?
C# NET. Framework 2.0 | Make a delay?
问:
如何让我的程序等待 1 秒然后做某事? 就像在NET中一样。带有 Task.Delay() 的框架 4.8,但我使用的是 NET。Framework 2.0 用于我的旧 Windows 2000 笔记本电脑的项目。我能做些什么吗?
panel1.Visible = true;
//delay
panel2.Visible = true;
//delay
...
答:
1赞
IVSoftware
5/26/2022
#1
我看到您想使 UI 面板在延迟时可见。要避免的一件事是 UI 线程上的任何显着延迟,因为您的表单在这段时间内将无响应,用户可能会认为它已崩溃。
一个好的方法是生成一个工作线程来执行此延迟操作,而不会阻塞 UI 线程。但是,当需要将 UI 面板更改为 UI 面板时,必须使用 Invoke 将其编组回 UI 线程。Visible
这是我用于在 C# .Net Framework 2.0 中测试此答案的代码。如果你想尝试一下,我把它贴在了 GitHub 上。
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
new Thread(makeVisibleOnDelay).Start();
}
private void makeVisibleOnDelay()
{
Thread.Sleep(1000);
Invoke((MethodInvoker)delegate { panel1.Visible = true; });
Thread.Sleep(1000);
Invoke((MethodInvoker)delegate { panel2.Visible = true; });
}
}
现在,面板将逐步显示:
评论
0赞
IVSoftware
5/27/2022
我很高兴听到这个解决方案满足您的需求!我应该提到的一件事是,虽然是做这样的事情的好地方,但它可能会干扰设计师。因此,最好使用 Form 的属性检查应用是运行时还是设计时:OnHandleCreated
DesignMode
if(!DesignMode) { new Thread(makeVisibleOnDelay).Start(); }
评论
Thread.Sleep()
?learn.microsoft.com/en-us/dotnet/api/......System.Windows.Forms.Timer