.net - 禁用 Windows 窗体上的所有事件

标签 .net winforms multithreading events

有没有办法暂时禁用 Windows 窗体上的所有事件?

我的情况是辅助线程上的处理被主线程上的事件破坏。 (主线程事件正在修改数据绑定(bind)到辅助线程使用的变量的控件的内容。)寻找一种“锁定”表单的方法,直到辅助线程上的处理完成。 (显然,将处理移到主线程会做到这一点——但它也会“卡住”用户界面,这也不是我想要的。)

最佳答案

一些不同的选项应该可以让您解决这个问题:

  • 禁用任何会触发非线程安全事件的控件,
  • 使用同一对象上的监视器或
  • 锁定所有修改变量的代码或所有事件引发程序
  • 分离并重新连接所有处理程序。

  • 我会选择第一个选项,可能还会将光标设置为沙漏和/或在状态栏中设置一条消息。这很简单,它可以工作,并且不会导致实际的 UI 卡住。我会避免使用第三个选项,因为它会在表单工作时“破坏”表单的行为。第二个选项的效果取决于你如何实现它;它可以很容易地卡住用户界面,这是你不想做的事情..

    关于.net - 禁用 Windows 窗体上的所有事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3841020/

    相关文章:

    c# - 从另一个窗体调用方法c#

    android - 在事务运行时读取 sqlite 数据 (Android)

    c++ - 等待条件变量破坏类

    c# - 可升级的readlock的优势?

    使用 Windows CE 的 .Net 紧凑型网络打印

    c# - .NET 3.5 - 还有其他压缩文件的方法吗

    c# - List<T> Add 方法在 Button.Click 事件中不起作用,但在 Form.Load 中起作用

    c# - 当 Windows 从 sleep 模式唤醒时启动应用程序

    C# WebClient DownloadProgressChanged 无法正常工作

    c# - 无法进入 .NET Framework 源代码