【发布时间】:2021-08-11 20:09:40
【问题描述】:
我有很多表单,我在我的 Main form 上管理它们。我使用 ShowDialog() 打开其他表单,而我的一些表单涉及定时器操作,在关闭对话框后继续运行,我使用
this.Close();
用于关闭显示对话框,但它仍然在后面工作,然后在我的主窗体上显示 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;
}
}
}
【问题讨论】:
-
您知道吗,您可以在将控件拖放到表单后重命名它们~?您应该重命名它们,因为每个控件都称为
controltypeN的某些变体的代码真的很难理解。你能想象如果微软采取同样的策略,而不是string.Length或string.Contains/string.StartsWith你只是有string.IntProperty1,string.BoolReturningMethod1/string.BoolReturningMethod2,那么使用 C# 会有多难吗? -
您有问题吗?如果您希望计时器在关闭表单时停止工作,请在计时器上调用
Stop,然后设置Enabled=false; -
我尝试使用 timer1.stop 然后 enabled=false 但它不起作用代码仍然在后面运行
-
在 Visual Studio 中中断执行并找出正在运行的代码。如果您只是关闭一个表单,并不意味着它停止执行代码。例如,您在哪里退出
while (_isPaused)循环?