首页 > 解决方案 > c#关闭winform后我的代码继续运行

问题描述

我有很多表格,我在我的 Main form 上管理它们。我使用 ShowDialog() 打开其他表单,并且我的一些表单涉及定时器发生的操作在关闭对话框后继续运行,我使用

this.Close();

关闭 showdialog 但它仍然在后面工作,然后在我的主窗体上显示 messagebox.show 。我的意思是它是否像它仍然处于活动状态但我关闭了对话框一样工作?

下面的代码只是其中之一,它适用于任务等待,我的其他表单使用计时器运行,我也遇到了同样的问题。

private async void ıconButton4_Click(object sender, EventArgs e)
    {
        saniye = 0;


        if (hız <= 29)
        {
            MessageBox.Show("Başlamadan önce hızı da belirlemeliyiz", "Hız belirtilmedi", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        else
        {
            buttondurdur.Enabled = true;

            button1.Enabled = false;
            button2.Enabled = false;

            menuStrip1.Enabled = false;

            richTextBox1.Text = string.Empty;


            TextFormatFlags flags = TextFormatFlags.Top | TextFormatFlags.Left |
                                    TextFormatFlags.WordBreak | TextFormatFlags.NoPadding |
                                    TextFormatFlags.TextBoxControl;

            timer1.Enabled = true;


            foreach (var word in GetWords())
            {
                richTextBox1.Text += (word + ' ');
                kelimesayısı += 1;
                do
                {
                    await Task.Delay(hız);
                } while (_isPaused);



                Size textSize = TextRenderer.MeasureText(richTextBox1.Text, richTextBox1.Font, richTextBox1.Size, flags);


                if (textSize.Height >= (richTextBox1.Height - 40))
                {
                    richTextBox1.Clear();
                }


            }




            if (Saying.Length >= 150)
            {
                timer1.Stop();
                MessageBox.Show("Okuma hızınız dakikada " + (kelimesayısı * 60) / saniye + " kelime ");
                timer1.Enabled = false;
                richTextBox1.Clear();
                button1.Enabled = false;
                button2.Enabled = true;
                buttondurdur.Enabled = false;
                Saying = string.Empty;
                kelimesayısı = 0;

                menuStrip1.Enabled = true;
                saniye = 0;

            }
            else
            {
                MessageBox.Show("Seçilen metin çok kısa ", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error);
                timer1.Enabled = false;
                richTextBox1.Clear();                
                buttondurdur.Enabled = false;
                Saying = string.Empty;
                saniye = 0;
                kelimesayısı = 0;

                button1.Enabled = true;
                button2.Enabled = true;

                menuStrip1.Enabled = true;
            }
        }




    }

标签: c#dialog

解决方案


您可能想尝试this.Dispose();,而不是this.Close();. 虽然这是一个更糟糕的解决方案,但在这种情况下它可能会更好。


推荐阅读