你好。我有winforms app。在应用程序中我有输入表单。 A想要在点击OK按钮后模拟延迟。但是代码正在运行,单击后表单立即关闭。请帮助。
按钮已将DialogResult设置为OK 。我使用ShowDialog来显示表单。
//btn click handler
private async void btnOk_Click(object sender, EventArgs e)
{
customer.UserName = "testing";
await Task.Delay(30000);
//await Task.Run(()=> System.Threading.Thread.Sleep(30000)); //I tried this too
return;
}
答案 0 :(得分:2)
一旦btnOK_Click
方法返回,您的对话框就会关闭,因为该按钮的属性设置为DialogResult
。
btnOK_Click
方法会在Task.Delay
开始延迟后立即返回,因为它是async
方法。此时对话框关闭,好像Task.Delay
无法正常工作。
要阻止这种情况发生,您可以从按钮中移除DialogResult
属性,并在DialogResult
声明后将父表单OK
设置为await
然后手动调用Close
方法。
private async void btnOk_Click(object sender, EventArgs e)
{
customer.UserName = "testing";
await Task.Delay(30000);
DialogResult = DialogResult.OK;
Close();
}
答案 1 :(得分:-1)
由于你没有主动从你的btnOK_Click调用Close(),我假设你已经将Button.DialogResult属性设置为DialogResult.OK:
如果此属性的DialogResult设置为除以外的任何内容 无,如果父表单是通过ShowDialog显示的 方法,单击按钮关闭父表单,而不是你的 连接任何事件。
如果你确实搞了一个事件,这也会关闭表格。
更好的方法是记住您正在关闭并启动System.Windows.Forms.Timer。 Timer.Tick事件处理程序可以检查您是否正在关闭;设置DialogResult属性并调用Dialog.Close()