我一直在尝试运行一个程序,经过一段时间后,该程序必须显示一个表单。我将问题简化为:
privet int numbertest;
privet Timer testtimer = new Timer(10000);
public void starttimer()
{
testtimer.Elapsed += Testtimer_Elapsed;
testtimer.Start();
}
private void Testtimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
numbertest++;
switch (numbertest)
{
case 1:
MessageBox.Show("1");
break;
case 2:
var form = new Form2();
form.Show();
break;
case 3:
testtimer.Stop();
break;
default:
break;
}
}
当计时器到达case 2:
时,form.Show();
不会像在计时器外部那样运行。
.Show()
几秒钟后显示一个空白的小故障框,其中没有任何信息,您无法将其关闭。大约10秒钟后,它将自行关闭。
我也尝试过.Showdialog
可以工作,但是它将停止计时器,并且不允许用户使用应用程序的其他部分(应该如此)。
问题不在.Show()
上,因为它将在计时器方法之外运行。但是如果计时器调用其中带有.Show()
的任何方法,则.Show()
将不会运行(通常会如此)。
[如果有其他方法可以不使用.Show()
来显示获胜表格窗口,我很乐意尝试。
Form2不必内部有任何问题。
我尝试使用System.Windows.Forms.Timer
而不是System.Timers
,但它确实有效。这是一个同步计时器。 (据我了解),这意味着计时器和form.Show()
行可以同时运行。
正如Adassko和Hans Passant在评论中指出。