我的小型 Windows 窗体应用程序有两个单选按钮,最初都没有被选中。在选中其中一项之前,应禁用“Go”按钮。
我找到了一种非常简单的方法来获取此信息,但我不确定我是否正在为随机崩溃做好准备。
我添加了一个计时器组件,启用它,并在 Tick 事件中:
private void timer1_Tick(object sender, EventArgs e)
{
bool canGo = (_usRadioButton.Checked || _intlRadioButton.Checked);
if (_goButton.Enabled != canGo)
{
_goButton.Enabled = canGo;
}
}
我知道还有其他方法可以做到这一点,我只是好奇这种方法是否有效,或者当计时器在表单更新的同时触发时,最终用户是否会抛出异常选中了其中一个复选框的属性?
最佳答案
如果我理解正确,您已经了解 CheckedChanged 事件,并且只是询问代码中的冲突。所以:
据我所知这不是多线程,并且没有危险。 Tick 事件实际上不会在计算机更新 Checked 状态的同时触发。
如果您在 Form.Load 和 Timer.Tick 中放置跟踪:
private void Form_Load(object sender, EventArgs e)
{
Console.WriteLine("Form_Load/Thread.CurrentThread.ManagedThreadId=" + Thread.CurrentThread.ManagedThreadId);
}
private void timer1_Tick(object sender, EventArgs e)
{
Console.WriteLine("timer1_Tick/Thread.CurrentThread.ManagedThreadId=" + Thread.CurrentThread.ManagedThreadId);
}
结果显示:
Form_Load/Thread.CurrentThread.ManagedThreadId=9
timer1_Tick/Thread.CurrentThread.ManagedThreadId=9
关于c# - 我可以在 WinForms 窗体中使用计时器组件来检查单选按钮的状态并启用/禁用按钮吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9179758/