MethodInvoker + lambda + 参数 + 跨线程操作

2023-12-21

我用它来更改其他线程上的某些内容:

        MethodInvoker m = () => { login_submit.Text = "Login"; };
        if (InvokeRequired)
        {
            BeginInvoke(m);
        }
        else
        {
            Invoke(m);
        }

这工作正常。

如何将参数传递给该 lambda 表达式?

我想做那样的事情:

        MethodInvoker m = (string txt) => { login_submit.Text = txt; };
        if (InvokeRequired)
        {
            BeginInvoke(m); // I need to pass txt string in some way here.
        }
        else
        {
            Invoke(m); // I need to pass txt string in some way here.
        }

如果这是您的常见场景,我建议编写一个扩展方法:

public static class ControlExtensions
{
  public static void EnsureInvokeAsync(this Control control, Action action)
  {
     if (control.InvokeRequired) control.BeginInvoke(action);
     else action();
  }
}

class MyControl : UserControl
{
    void M(string s)
    {
       // the lambda will capture the string in a closure
       // the compiler does all the hard work for you
       this.EnsureInvokeAsync(() => _button.Text = s);
    }
}

另外,您应该考虑使用BackgroundWorker或异步操作的任务。

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

MethodInvoker + lambda + 参数 + 跨线程操作 的相关文章

  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐

  • REST - 使用 Spring MVC 返回创建的对象

    我有一个 REST 调用 它接受一个 JSON 对象 比如说一个人 创建此对象 经过验证并保存到数据库 后 我需要返回新创建的 JSON 对象 我认为标准做法是返回201 Accepted而不是立即返回对象 但我的应用程序立即需要新创建的对
  • 有人使用 Sphinx 来记录 C++ 项目吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Sinatra/Ruby 默认一个参数

    有没有办法在 Sinatra 中默认参数 我目前正在寻找是否 start 作为参数传递 但看起来有点hacky 如果我能告诉 Sinatra 在未指定的情况下默认某些参数 那就太好了 get comments do want to setu
  • 选择 html 元素内的文本并更改样式

    text1 div text2 div 我只需要选择 text1 并添加一些样式 I tried body color red 但text1和text2都变成红色 我正在寻找类似的东西 css selector im searching c
  • 使用新的 prefixText 时如何更改 TextInputLayout 的提示填充?

    我尝试过实施TextInputLayout与新的prefixText using com google android material material 1 2 0 alpha02 这是一个非常酷的功能 但是当我添加前缀文本时 提示标签会
  • 为什么 C/C++ 编译器需要在编译时知道数组的大小?

    我知道 C99 以及 C 之前的 C 标准规定 堆栈上数组的大小必须在编译时已知 但这是为什么呢 堆栈上的数组是在运行时分配的 那么为什么大小在编译时很重要呢 希望有人向我解释编译器在编译时将如何处理大小 谢谢 这种数组的示例是 void
  • 具有最小宽度的 3 列布局(固定、流动、固定)

    我在网上搜索过 似乎找不到一个干净 简单 所有浏览器友好的三栏布局 我希望有 3 列布局 左列固定为 200px 右列固定为 200px 中间列保留剩余宽度 但最小宽度为 600px 所以整体最小宽度是 200px 600px 200px
  • 如何访问angular2组件中的全局js变量

    我在下面定义了一个全局 js 变量 Url 是一个 ASP Net MVC html 帮助器 它将转换为字符串值 如何访问 angular2 组件中的 rootVar 我曾经在 Angular 1 5 中使用窗口服务 在 Angular2
  • 使用 ADO.Net 实体模型的优点和缺点

    HI 使用 ADO NET 实体模型作为数据层有哪些优缺点 如果我要使用这项技术 我应该使用 LINQ 吗 Thanks 首先 您不必使用 LINQ 来使用实体框架 EF 但它确实有帮助 EF 基于 EF 团队所称的东西实体SQL 因此 当
  • Linq 合并左连接数据

    假设我有以下数据库 Users UserId PK UserName Roles RoleId PK RoleName UserRoles UserId PK RoleId PK 用户 1 M 用户角色 M 1 角色 使用 LinqToSQ
  • 如何在 Windows 7 GAC 中注册 Assembly .net 4.0?

    您好 我正在使用 vs2010 创建一个 net 4 0 程序集 我假装在 GAC 上注册该程序集 我找不到 gacutil 也不知道如何在 4 0 GAC 上注册程序集 有人可以帮忙吗 找到解决方案 使用位于以下位置的 GacUtil 进
  • 如何按行长度对文件进行排序,然后按字母顺序对第二个键进行排序?

    假设我有一个文件 ab aa c aaaa 我希望它像这样排序 c aa ab aaaa 即按行长度排序 然后按字母顺序排序 这在 bash 中可能吗 您可以在每行前面添加行的长度 然后进行数字排序 最后剪掉数字 lt your file
  • PostgreSQL - 使 ts_rank 按原样采用 ts_vector 位置或定义自定义 ts_rank 函数

    我正在对电子商务平台中的一系列商品执行加权搜索 我遇到的问题是 ts rank 为不同的单词组合提供了完全相同的值 即使 ts vector 为每组单词提供了不同的位置 让我用一个例子来说明这一点 如果我给 ts vector 这个词cam
  • zsh 和 bash 的 echo 有什么区别?

    在 bash 中 在这种特定情况下 echo 的行为如下 bash c echo a nb a nb 但在 zsh 中 同样的事情结果却截然不同 zsh c echo a nb a b 和鱼 因为我很好奇 fish c echo a nb
  • “类的无参数构造函数不存在”,但它确实存在

    我收到错误No args constructor for class MwVolleyApi Page does not exist Register an InstanceCreator with Gson for this type t
  • Javascript 在 if 语句中返回 false

    使用 return false 是个好习惯吗 基本上是说在 if 语句中什么都不做 例如 if navigator userAgent match iPad i null return false else Usual script her
  • 有没有办法在基于 DOS 的程序中读取键盘修改键,例如 ALT 或 CTRL?

    我确实知道您可能会轮询键盘缓冲区以获取修饰键 例如 ALT 或 CTRL 但即使在旧的 DOS 程序中 当我按下这些键时也会执行一个操作 例如 通过按 ALT 来更改菜单按钮的颜色 在DOS下有没有办法获得这些密钥 这是如何做到的 我认为在
  • 如何在本地安装 Angular CLI(不带 -g 标志)

    我刚刚开始使用 Angular 并与Angular CLI我已经看到 根据文档 我需要安装 npm install g angular cli与 g 全局 标志 不过 我希望将 Angular CLI 与我的其余部分一起安装在本地节点模块包
  • Scala 中 Seq[T] 和 T* 之间有区别吗?

    我的 IDE 工具显示xs有类型Int 在下面的代码片段中 def accept xs Int true 然而 语言参考说重复参数声明为T 有类型Seq T 之间有区别吗Int and Seq Int 它们是不同的 T 泄漏到类型签名中的功
  • MethodInvoker + lambda + 参数 + 跨线程操作

    我用它来更改其他线程上的某些内容 MethodInvoker m gt login submit Text Login if InvokeRequired BeginInvoke m else Invoke m 这工作正常 如何将参数传递给