Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中使用WinForm应用程序执行代码的时间延迟#_C#_Winforms - Fatal编程技术网

C# 在c中使用WinForm应用程序执行代码的时间延迟#

C# 在c中使用WinForm应用程序执行代码的时间延迟#,c#,winforms,C#,Winforms,我尝试使用以下代码延迟2秒: public async Task DoTasks(int seconds) { frmDeleteCertificateProgress f = new frmDeleteCertificateProgress(); f.ShowDialog(); await Task.Delay(seconds * 1000); f.Close(); } 但是当表单打开时,延迟后它不会关闭。我遗漏了什么?由于“ShowDialog”,它等待关闭

我尝试使用以下代码延迟2秒:

public async Task DoTasks(int seconds) {
    frmDeleteCertificateProgress f = new frmDeleteCertificateProgress();
    f.ShowDialog();
    await Task.Delay(seconds * 1000);
    f.Close();
}

但是当表单打开时,延迟后它不会关闭。我遗漏了什么?

由于“ShowDialog”,它等待关闭表单。您应该使用Show()方法。

注意:您正在调用
ShowDialog()
,它有一些非常特定的行为。显示的表单是“模态”的,这意味着它阻止程序中除该表单之外的任何用户输入。在使用
ShowDialog()
方法时,这通常是有意的,您过早接受的答案无法保留此行为

ShowDialog()
方法在显示的模式窗体(即“对话框”)关闭之前不会返回。因此,您的延迟和随后对
Close()
窗口的调用在太迟之前无法进行,即对话框窗口已经关闭

有许多不同的方法来实现这一点。最简单的方法之一是将关闭窗口的代码放入所示
事件的处理程序中:

public void点任务(整数秒)
{
frmDeleteCertificateProgress f=新的frmDeleteCertificateProgress();
f、 显示+=异步(发送方,e)=>
{
等待任务。延迟(时间跨度从秒(秒));
f、 Close();
};
f、 ShowDialog();
}
显示对话框窗口时,将执行处理程序。它将根据您的需要延迟,然后关闭对话框窗口

如果您对延迟的确切时间不太在意,也就是说,您不介意窗口的可见延迟被初始化对话框所需的时间缩短,那么您可以使用“触发并忘记”异步方法:

public void点任务(整数秒)
{
frmDeleteCertificateProgress f=新的frmDeleteCertificateProgress();
CloseAfterDelay(f,TimeSpan.FromSeconds(秒));
f、 ShowDialog();
}
专用异步void CloseAfterDelay(格式、时间跨度延迟)
{
等待任务。延迟(延迟);
form.Close();
}

太棒了。成功了@Tempora:只有当您首先不需要
ShowDialog()
时,它才起作用。否则,用户可以在对话框外进行交互,这与
ShowDialog()
方法的意图相反。@PeterDuniho我认为,他/她隐藏了表单。否则你是对的。“我想,他/她隐藏了形式”——你怎么会这么想?问题中没有任何东西表明这是真的。@PeterDuniho你是对的。我更喜欢/建议你的解决方案。