从后台线程结果更新 Winforms UI

2023-11-22

这可能是一个愚蠢的问题,但我在 stackoverflow 上找不到答案。

我在 Winform 应用程序中有一个按钮单击事件,该应用程序运行一个线程来计算要在表单中显示的结果。

当线程计算出结果后,如何更新 Forms UI?

    private void btnRequestR2Approval_Click(object sender, EventArgs e)
    {
        if (User.IsLogged)
        {
            ValidationResults results = new ValidationResults();
            results.Show();

            Logger log = Logger.Instance();
            Logger.NewLogAddedHandler messageDelegate = new Logger.NewLogAddedHandler(results.NewLogMessage);

            if (!log.IsEventHandlerRegistered())
            {
                log.NewLogAdded += messageDelegate;
            }

            ThreadStart operation = new ThreadStart(ValidateAndSubmit);
            Thread theThread = new Thread(operation);
            theThread.Start();

        }
        else
        {
            MessageBox.Show("Please login");
        }

    }

谢谢


在 WinForms 中执行后台任务的最简单技术是使用后台工作者.

  • 将其放到表格上。
  • 连接事件。至少使用DoWork。您可能还想要RunWorkerCompleted.
  • 将您的后台任务写入DoWork event.
  • 将任何 UI 更改写入RunWorkerCompleted event.
  • Call backgroundWorker1.RunWorkerAsync();启动该过程,可能来自某个按钮处理程序。

使用BackgroundWorker 可以避免所有烦人的线程处理和IsInvokeRequired 的东西。

这里有更详细的操作方法文章.

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

从后台线程结果更新 Winforms UI 的相关文章

  • 在 TPL Dataflow 中,是否可以在创建块之后但使用之前更改 DataflowBlockOptions?

    有效果吗 我想推迟设置 ExecutionDataflowBlockOptions SingleProducerConstrained 属性 直到我准备好将网络链接在一起 因为 我想将创建块及其语义与将网络及其语义链接在一起分开 但据我所知
  • Image.FromStream() 方法返回 Invalid Argument 异常

    我正在从智能相机成像器捕获图像 并通过套接字编程从相机接收字节数组 NET 应用程序是客户端 相机是服务器 问题是我在运行时收到 System InvalidArgument 异常 private Image byteArrayToImag
  • CAS(代码访问安全)的目的是什么?

    我参与过很多 Web 应用程序 但从未使用过 CAS 也许也从未觉得有必要使用它 什么时候需要使用CAS 人们真的在他们的应用程序中使用它吗 CAS 实际上只在桌面应用程序中有用 可以这么说 在桌面应用程序中 您想要限制通过网络 例如 运行
  • 如何使用线程在 C# 中依次运行 3 个方法?

    我有三种方法 即方法1 方法2和方法3 方法1用于从一个站点下载图像 方法2用于从第二个站点下载图像 方法3用于比较图像 Method1 获取根据产品 id 逐一添加到列表中的图像 url 列表 即多个产品 id 的集合上有一个循环 然后根
  • Fluent 验证和库

    前几天在寻找完全不同的东西时 我偶然发现了两个用于在 NET 中进行流畅验证的库 这个概念似乎很有趣 因为到目前为止我正在使用通常的条件和分支语句 if else case 等 进行验证 特别是 它使得链接某些条件相对容易 这些条件在某些情
  • 如果一个参数为空,最佳实践是什么?

    在验证方法的输入时 我通常会检查参数是否为空 如果是 我会抛出 ArgumentNullException 我对列表中的每个参数都执行此操作 因此最终得到如下代码 public User CreateUser string userName
  • 当ConfigureAwait(false)导致错误而不是死锁时的情况

    假设我写了一个依赖于async方法 namespace MyLibrary1 public class ClassFromMyLibrary1 public async Task
  • 如何知道 Socket 的发送缓冲区中有多少数据

    我可以通过调用来知道 Socket 的接收缓冲区中有多少数据Socket IOControl IOControlCode DataToRead null outValue 是否有等效的方法来告诉 Socket 的发送缓冲区中有多少数据 我需
  • “thread._local”对象没有属性

    我试图通过添加上下文过滤器来更改日志记录格式 我的格式是这样的 FORMAT asctime s VAL s message s 这是我用来设置格式中的 VAL 的类 class TEST def init self val self te
  • 单击按钮时运行表单上的所有验证事件

    我有一个带有一些文本框和组合框的小表单 每个都有自己的验证事件 当用户移动到下一个框而不输入任何内容时 它只会填充默认值 1 或 0 具体取决于该框 但是我也想要当用户直接单击提交按钮时运行所有验证 private void Validat
  • .NET 中可以使用通用 BitConverter.GetBytes 吗?

    是否可以创建类似的方法BitConverter GetBytes 也接受作为输入范围类型的Object 不使用编组处理here https stackoverflow com questions 1455581 generic bitcon
  • 如何使用 C# 将 Windows 窗体面板作为位图获取?

    我有一个 Windows 窗体 其中一个面板上有多个控件 面板并不占据所有的表单空间 而只占据一小部分 我想知道是否有某种方法可以将面板 带有所有子控件 的显示检索为位图 就像屏幕截图一样 但仅裁剪到面板 我没有查看屏幕截图 因为面板位于可
  • 使用 C# LINQ 按任一列分组

    我有一组数据 其中包含如下所示的列 OffName RO1 RO2 RO3 为了进一步解释 我使用如下示例数据 OffName RO1 RO2 RO3 A John Jack Rob B Earl John Carl C Rob Chris
  • 通过 TCP/IP 同步两台 PC 之间的时间,无需服务器

    我有两台通过 LAN 连接的 PC 当用户更改一台机器上的时间 通过我的应用程序 时 我希望第二台机器上的时间也能更新 或者第二台机器可以轮询第一台机器 没有服务器 没有互联网 最好的方法是什么 操作系统 XP嵌入式 框架 Net 3 5
  • 可空可选参数

    我在 asp net mvc 应用程序中使用带有 edmx 文件和 POCO 的实体框架 4 首先 我有一个映射到数据库中的表的人员类 public class Person public Int32 ID get set public s
  • C# 中的序列化和对象版本控制

    如果我想序列化一个对象 我必须使用 Serializable 属性和所有成员变量将被写入该文件 我不知道如何进行版本控制 例如如果我添加一个新的成员变量 重命名变量或仅删除变量 然后打开 反序列化 文件 如何确定对象 文件版本 以便我可以正
  • 为什么单线程异常会导致整个程序崩溃(如何防止这种情况?)

    例如 如果我跑步 int x 0x00000 程序崩溃了 但为什么整个程序崩溃而不是单个线程崩溃呢 我创建了多个连续睡眠的线程来测试这一点 有什么方法可以让当前线程退出 而不是整个程序 在Windows上使用winapi Thanks 但为
  • 如何使用 C# 和 IBM Watson SDK 将实时音频流立即发送到 IBM Watson Speech-To-Text,而不在本地保存音频文件?

    我需要使用 IBM Watson SDK 使用麦克风录制音频 并使用 C 将其发送到 IBM Watson 语音转文本 我可以通过在本地保存音频文件然后使用发送它来实现此功能NAudio图书馆 但我的要求是使用流模式将实时音频发送到 IBM
  • 在使用 stop_token 等待条件变量_any 时是否需要拥有锁来请求停止?

    在等待条件变量时 更改谓词状态的线程必须拥有锁 因此在唤醒期间不会错过更新 根据文档 这是必要的 即使在使用原子变量时也是如此 不过我不确定是否request stop 已经正确处理了 那么问题是 这两个选项中哪一个是正确且符合标准的呢 j
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正

随机推荐

  • g++:数组界限不是整数常量

    有了代码 const double rotationStep 0 001 const int N 2 int M PI rotationStep 3 static unsigned int counts N g 给出错误 数组边界在 标记之
  • C# 为什么“Flush”不强制字节流到网络流中?

    我有一个项目 我试图将序列化对象发送到服务器 然后等待 OK 或 ERROR 消息返回 我似乎遇到了与海报类似的问题 TcpClient发送 关闭问题 问题是 我似乎能够发送原始对象的唯一方法是关闭连接 但是 当然 我迫不及待地想看看服务器
  • 属性装饰器的 setter 方法没有被调用

    我试图使用属性方法来设置类实例的状态 具有以下类定义 class Result def init self x None y None self x float x self y float y self visible False sel
  • 在 jQuery 中获取图像的原始宽度和高度

    我需要获取给定特定来源的图像的原始宽度和高度 我目前的方法是 img tag img style display none src img Owidth 0 img Oheight 0 img tag load function img O
  • 如何将 C# 值向上舍入到最接近的整数?

    我想将 double 舍入为 int Eg double a 0 4 b 0 5 我想将它们都更改为整数 so that int aa 0 bb 1 aa来自a and bb来自b 有什么公式可以做到这一点吗 Use Math Ceilin
  • 如何停止 Android 垃圾收集器?是否可以?

    有什么办法可以让垃圾收集器停止一段时间吗 不被 GC 滞后的最好方法是避免一直收集垃圾 例如 您可以重用对象 而不是清空它们并创建新对象 这与 androids CursorAdapter 在重用视图时所做的模式完全相同 它只是重用视图来表
  • 为什么 MediaPlayer 在创建它的实例时抛出 NOT Present 错误?

    创建 MediaPlayer LogCat 实例时显示此错误 QCMediaPlayer 媒体播放器不存在 为什么会这样 这正常吗 Sample package com example testapp import android app
  • 浮动大小 (3.0) 与 (3.0f)

    sizeof 3 0 和 sizeof 3 0f 有什么区别 我期望他们都给出相同的结果 sizeof float 但它不同 在32位机上 gcc编译器 大小 3 0f gt 4 大小 3 0 gt 8 Why so 因为3 0是双倍的 看
  • 短暂隐藏 ActionBar 而不调整 Activity 大小

    我正在使用 ViewPager 在不同片段之间滚动 有两种类型的片段 使用两种不同的菜单资源 我将在必要时使菜单无效以在这些资源之间进行切换 这一切都工作得很好 但是菜单是 重绘 的 没有动画 为了避免弄乱各个菜单项 我希望在加载新菜单时可
  • 用于多行文本框的 ASP 正则表达式验证器

    我需要验证文本框输入的长度 最大长度属性不适用于多行文本框 我的正则表达式是
  • dart:web_gl: 渲染警告:绑定到纹理单元 0 的纹理不可渲染

    我收到错误 WebGLRenderingContext RENDER WARNING texture bound to texture unit 0 is not renderable It maybe non power of 2 and
  • 当Android中的用户禁用GPS时如何收到通知?

    我正在创建一个使用 GPS 的应用程序 第一次在onCreate 我正在检查 GPS 是否启用 如果未启用 那么我会将用户发送到设置菜单以将 GPS 设置为启用 一旦 GPS 启用 我就开始执行我的工作 但是 如果用户在通知管理器上停止 G
  • 使用通用图像加载器在 GridView 中加载图像

    我正在使用通用图像加载器 1 8 6用于动态加载从网络获取的图像的库 The ImageLoaderConfiguration配置如下 ImageLoaderConfiguration config new ImageLoaderConfi
  • 如何在 qnx 上安装 ssh 服务器?

    我正在使用 qnx 设备 并且我希望能够通过 ssh 进入它 有人有关于启动和运行 openSSH 之类的入门知识吗 如果你想启动一个SSH服务器来轻松传输文件 SSH 守护程序 sshd 已安装 但缺少 配置 创建密钥 不要使用密码 ra
  • COM 对象 C# 将 MMDeviceEnumerator 转换为 IMMDeviceEnumerator InvalidCastException

    我没有 COM 导入方面的经验 只是使用其他人的代码 但这些代码不适合我 抛出 InvalidCastException 的代码行 IMMDeviceEnumerator deviceEnumerator IMMDeviceEnumerat
  • 我们可以将光标设置为会话变量吗?

    我尝试将光标设置为会话变量 看起来它不起作用 有人对此有想法吗 My Code Meteor call apiresult function e result console log result Session set object re
  • 如何确保在 Android 中发送短信

    在我的应用程序中 将在执行操作时发送一条通知短信 现在我如何确保短信会被发送 例如 如果没有网络或没有拔出SIM卡 如何保证稍后有网络可用时仍能发送短信 是否可以将短信添加到队列中 这可能吗 提前致谢 佩鲁马尔 您可以使用广播接收器捕获短信
  • 在 perl 中使用 -d 测试运算符

    我正在查看某人的旧代码 我发现了这样的声明 tmpStr some file location if d tmpStr printf 1 else printf 2 我很困惑什么 d有 有帮助吗 d如果后面的字符串是目录 则返回 true
  • 记录对 http.HandleFunc 内传入 HTTP 请求的响应

    这是一个后续问题在go中 如何检查写入http ResponseWriter的http响应 因为那里的解决方案需要伪造请求 这对于单元测试非常有用 但不适用于实时服务器 我想将我的 Web 服务为响应从用户收到的请求而返回的 HTTP 响应
  • 从后台线程结果更新 Winforms UI

    这可能是一个愚蠢的问题 但我在 stackoverflow 上找不到答案 我在 Winform 应用程序中有一个按钮单击事件 该应用程序运行一个线程来计算要在表单中显示的结果 当线程计算出结果后 如何更新 Forms UI private