c# - 我可以在 WinForms 窗体中使用计时器组件来检查单选按钮的状态并启用/禁用按钮吗?

标签 c# winforms multithreading

我的小型 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/

相关文章:

ISO C 中的跨平台并发库

android - 为什么大多数 UI 框架都是单线程的?

c# - 使用任务 : ContinueWith needs a return statement which my business logic doesn't require

c# - 使用 IHttpAsyncHandler 异步调用 WebService

c# - 为 Winforms 应用程序添加命令行支持

c# - 获取条码读取器值表单后台监控

c++ - 多线程环境中单例资源的互斥保护

c# - java阻塞内存

c# - 在 C# 中反射(reflect)派生类

c# - 在 .net 2.0 中的两个流之间复制