经过指定的时间后自动关闭的模式窗体
在开发单线图排版算法演示功能时,需要每执行一步排版过程,调整了电力设备的位置后就暂停一下,笔者第一个想到的方法就是让主线程暂停
代码如下:
private void showlayout_delay(double p_second)
{
DateTime now = DateTime.Now;
while (now.AddSeconds(p_second) > DateTime.Now)
{
}
return;
}
或
System.Threading.Thread.Sleep(p_waitMilliSecond);
上面的方法虽然让程序暂停下来,但是却存在一个问题:无论排版过程运行了多少步,程序的图形状态始终和初始时一样,不会变化
即使使用Invalidate、refresh方法强制刷新整个屏幕
最终使了个小聪明解决了该问题:制作一个经过指定的时间后自动关闭的模式窗体
代码如下
public partial class FormDialogAutoClose : Form
{
private Thread waitThread;
public FormDialogAutoClose(int p_waitMilliSecond)
{
InitializeComponent();
waitThread = new Thread(new ThreadStart(delegate()
{
System.Threading.Thread.Sleep(p_waitMilliSecond);
this.closeByThread();
waitThread.Abort();
}));
waitThread.Start();
}
private delegate void closeByThreadHandler();
public void closeByThread()
{
if (this.InvokeRequired)
{
this.Invoke(new closeByThreadHandler(closeByThread));
}
else
{
this.Close();
}
}
}
调用代码
FormDialogAutoClose t_formClose = new FormDialogAutoClose(暂停时间);
t_formClose.ShowDialog();
同时为了“掩人耳目”,将该模式窗体的Visible属性设置为false