将 C# MethodInvoker.Invoke() 用于 GUI 应用程序...这样好吗?

2024-02-05

使用 C# 2.0 和 MethodInvoker 委托,我有一个 GUI 应用程序从 GUI 线程或工作线程接收一些事件。

我使用以下模式来处理表单中的事件:

private void SomeEventHandler(object sender, EventArgs e)
{
    MethodInvoker method = delegate
        {
            uiSomeTextBox.Text = "some text";
        };

    if (InvokeRequired)
        BeginInvoke(method);
    else
        method.Invoke();
}

通过使用这种模式,我不会重复实际的 UI 代码,但我不确定这种方法是否好。

特别是,该行

method.Invoke()

它是否使用另一个线程来调用,或者是否在某种程度上转换为直接调用 GUI 线程上的方法?


The method.Invoke()call 在当前执行线程上执行委托。使用BeginInvoke(method)确保在 GUI 线程上调用委托。

当可以从 GUI 线程和其他线程调用相同的方法时,这是避免代码重复的正确方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 C# MethodInvoker.Invoke() 用于 GUI 应用程序...这样好吗? 的相关文章

随机推荐

  • 多个子查询

    是否可以从同一个表的日期记录中得到如下结果 Enrolled Enrolled as Email Enrolled as Text Deals Redeemed
  • C++ 构造函数中抛出异常

    我创建了一个类 如果一个成员为空 我不想创建该对象 这些是代码行 include verification CVerifObj hpp VerifObj VerifObj const fs path imgNameIn m image cv
  • 在 NSManagedObjectsDidChangeNotification 创建无限循环后设置 lastModificationDate 属性

    我添加了一个最后修改日期属性到我的所有实体以避免同步时重复UIManagedDocument使用 iCloud 我发现如果我使用离线设备 iPad 创建新实体 同时使用另一个在线设备 iPhone 创建相同的实体 就会发生这种情况 我想在对
  • 如何动态向类添加属性

    我想创建一个错误类 并且它具有一些静态属性 例如 Message InnerException Stacktrace Source 但我想添加一些动态属性 如果异常是FileNotFoundException 我想补充一下FileName财
  • 我应该保留错误的命名约定吗?

    我目前正在开发一个网站 这个网站经过了天知道有多少开发者之手 我不喜欢它的一件事是数据库中的每个表都有前缀 tbl 和每个字段 fld 我已经开始开发一项新功能 但面临以下问题 我的新表是否应该继续使用旧约定 我想我应该这样做 但我觉得这样
  • Python Telegram Bot - run_daily 不起作用

    我有与此相同的问题thread https stackoverflow com questions 61650938 telegram bot how to send messages daily new answer newreg 4f6
  • 为什么没有调用构造函数? [复制]

    这个问题在这里已经有答案了 这段代码的行为不符合我的预期 include
  • 使用jdk1.7获取java中文件最后访问时间的示例

    请朋友帮忙 我知道使用jdk1 7我们可以获取文件的最后访问时间 谁能给出一个带有代码的示例来获取文件的上次访问时间 既然您在问题中提到使用jdk1 7 你真的应该研究方法上的接口 BasicFileAttributes最后访问时间 htt
  • C++ 使用参数初始化引用

    我有以下代码 我想知道为什么它写出 22 而不是垃圾 class example public example int ea ref ea int ref int main example obj 22 cout lt lt obj ref
  • 当 LINQ 语句没有 where 子句时,为什么没有智能感知?

    谁能告诉我为什么我do not使用以下代码获取智能感知 var testDocuments from u in db TestDocuments orderby u WhenCreated descending select u but I
  • 如何解决Apache Camel中的“无法创建路由route1异常”?

    我对 Apache Camel 概念很陌生 我尝试使用 apache Camel API 编写示例代码 当我尝试运行代码时 出现以下异常 谁能帮我解决这个问题 缺少依赖库 所以我添加了这些库并解决了我的问题
  • Composer create-project 在本地包存储库上失败

    我正在尝试创建一个local存储库来测试作曲家项目 但是 composer create project repository url path to packages json vendor project name 失败了 Unexpe
  • 如何重新排列 igraph 图中边的顺序?

    我正在尝试在 igraph 中制作一个网络图 通过对某些重要边缘进行不同的着色来突出显示某些重要边缘 对于大图 它们经常被埋在其他图下面 例如 library igraph test lt barabasi game 200 m 2 E t
  • 通过 URL 哈希链接触发打开 Zurb Foundation Accordion

    我真的很希望能够通过问题散列中带有手风琴窗格的 URL 激活 打开 Zurb 基金会手风琴 就像 example com page accordion1 Foundation 已经可以做到这一点吗 或者是否很容易实现 老实说我没有任何线索
  • Eclipse 中的块选择

    有谁知道在 Eclipse 中是否可以进行块选择 或矩形选择 也许有插件 我自己还没找到 从 Eclipse 3 5 开始可以进行块选择 您可以使用以下方法在标准选择和块选择之间切换 Alt Shift A Opt Cmd A on Mac
  • 动态地从 Reveal.JS 添加/删除幻灯片

    使用 Reveal js 运行演示文稿时是否可以添加 删除幻灯片 准确地说 是否有一个 API 可以实现这一点 或者可能有一些肮脏的解决方法 我对即将到来的项目也对此感到好奇 环顾四周 找不到任何东西 所以我为自己的项目写了一些东西 附加在
  • 将字节数组转换为 POD

    比方说 我有一个无符号字符数组 代表一堆 POD 对象 例如 从套接字或通过 mmap 读取 它们代表哪些类型以及在什么位置是在运行时确定的 但我们假设每个类型都已经正确对齐 将这些字节 转换 为相应 POD 类型的最佳方法是什么 解决方案
  • SQL/C# - 执行查询的最佳方法

    我需要从 C 类中执行 sql 查询 我想到了2个选择 启动sqlcmd进程 使用 SqlCommand 对象 我的问题是哪种方法更好 重要的是 该解决方案只能在短时间内保持与服务器的连接 如果上述想法不好 我愿意接受其他想法 提前致谢 使
  • select 的 Angular ng-change 不调用声明的方法

    我有以下 html 表单选择语句
  • 将 C# MethodInvoker.Invoke() 用于 GUI 应用程序...这样好吗?

    使用 C 2 0 和 MethodInvoker 委托 我有一个 GUI 应用程序从 GUI 线程或工作线程接收一些事件 我使用以下模式来处理表单中的事件 private void SomeEventHandler object sende