C#form.show()不在计时器中运行

问题描述 投票:0回答:1

我一直在尝试运行一个程序,经过一段时间后,该程序必须显示一个表单。我将问题简化为:

        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不必内部有任何问题。

c#
1个回答
0
投票

我尝试使用System.Windows.Forms.Timer而不是System.Timers,但它确实有效。这是一个同步计时器。 (据我了解),这意味着计时器和form.Show()行可以同时运行。

正如Adassko和Hans Passant在评论中指出。

© www.soinside.com 2019 - 2024. All rights reserved.