如何在不等待事件侦听器运行的情况下触发事件?

2024-03-27

我对 .NET (C#) 中的事件有疑问。我必须为几种情况编写代码,在这些情况下,我正在运行后台任务,并且我想通知主线程或控制器类发生了某些事情,例如任务已完成或完成了文件复制,但我不这样做不希望后台任务等待主线程的委托来处理事件。

我想做一些类似消息传递的事情:发送消息,但谁在乎他们用它做什么。

例如:

编写一个类来按顺序处理多个进程,一个接一个。每个进程都需要在后台线程上运行。当工作完成时,会触发一个事件并告诉控制器它已完成(假设使用 OnCompleted() 方法)

问题是,如果控制器的事件处理程序用于启动后续进程,则先前进程的 OnComplete 方法将保留在调用堆栈上(永远不会完成执行),直到所有进程完成为止。

在这种情况下,后台任务如何通知控制器类工作已完成,而不将事件引发方法保留在堆栈上?

示例2:一个备份程序。

后台线程运行以将每个文件复制到目标。背景需要notifyUI 是最后复制的文件,但不需要等待 UI 更新。相反,它只是想说:“顺便说一句,这里有一些信息。现在,让我回去工作。”事件侦听器不应阻止事件引发程序的处理。


听起来您正在尝试异步调用事件调用列表中的委托。

我建议你阅读.NET 异步事件将进程状态发送到用户界面 http://www.eggheadcafe.com/articles/asynchronous_events.asp:

.NET Framework 为我们提供了 引发事件的概念(以及其他 items)在我们的类中异步。 这意味着我们可以引发该事件 以这样的方式不具有 该事件的订阅者(通常 用户界面)按住 在提出的方法中进行处理 事件。这样做的好处是 不会产生负面影响 我们业务层的性能 方法。

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

如何在不等待事件侦听器运行的情况下触发事件? 的相关文章

  • 在 JavaScript 中引用 C# 变量

    我已经阅读了很多线程 但我不明白为什么这不起作用 我正在创建一个将用作导航栏的 SharePoint Web 部件 一切都很顺利 直到我尝试在 JS 代码中引用 C 变量 这是来自 VisualWebPart1UserControl asc
  • 使用 C#.net 中的私有存储库的身份验证读取 BitBucket API

    我已经尝试了几天让 BitBucket API 为我工作 但是当涉及到让它为具有身份验证的私有存储库工作时 将问题设置为私有 当它们设置为公开 无需身份验证 一切正常 代码示例如下 static void Main string args
  • 如何从对Web服务发出的请求中获取客户端IP地址

    我的 IIS 中托管有一个 Web 服务 当客户端直接使用我的服务时 我需要找出客户端 IP 地址 like http MyIpAddress MyApplication MyWebServiceClass asmx http MyIpAd
  • 从 unsigned char* 到 char* 的转换无效

    这是一个代码 1 int main int argc char argv 2 3 signed char S psc 4 unsigned char U pusc 5 char C pc 6 7 C S 8 C U 9 10 pc psc
  • 为什么迭代器类型推导失败? [复制]

    这个问题在这里已经有答案了 为什么这在 C 中不起作用 为什么我不能限制foo的参数为std vector
  • ptrace和waitpid有什么关系?

    我正在练习使用ptrace但我不太了解它和之间的关系waitpid 这是我的测试程序 int main int argc char argv pid t pid 22092 if ptrace PTRACE ATTACH pid NULL
  • 为基于架构的 XML 文件创建 WPF 编辑器

    这是场景 我们的服务器产品之一使用大型 XML 配置文件 该文件的布局相当好 并且针对 XSD 文件进行了验证 现在是时候构建一个配置 GUI 来维护这个文件了 我想深入研究 WPF 来完成它 我可以为每个配置部分布置一个单独的表单 每次向
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • 在 T4 代码生成中,如何从引用的程序集中获取类型?

    由于 T4 在项目上下文之外运行 因此我无权访问当前程序集或其他程序集 如何注册对引用程序集的访问 然后从中获取类型 我猜您想访问项目中建筑物的程序集 我在下面的示例代码中所做的是将一个名为 TestLib 的项目添加到我的解决方案中 我将
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • 我们什么时候应该在.NET中使用NativeMemory.Alloc()? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 NET6 C 引入NativeMemory类 但我不知道什么时候应该使用NativeMemory Alloc 而不是普通的数组实例化
  • Xcode 新手无法用 C++ 打开文件?

    我一直在我参加的课程中使用 Windows 但我正在尝试运行基本代码来弄清楚如何从 Xcode 上的文件打开 关闭 输入 输出 而我通常在 Visual Studio 上使用的代码不是不知道为什么 谢谢 include
  • 使用 (float&)int 进行类型双关可以正常工作,(float const&)int 会像 (float)int 一样转换吗?

    VS2019 发布 x86 template
  • Bazel:将编译标志添加到默认 C++ 工具链

    我想向默认的 C 工具链添加一些编译器和链接器标志 以便我构建的所有目标 本地或导入 共享它们 我知道可以定义我自己的工具链 但我不想这样做 因为它非常复杂且容易出错 理想情况下我想要这样的东西 cc toolchain cc defaul
  • C# SignalR 异常 - 连接在收到调用结果之前开始重新连接

    我正在开发 2 个应用程序 第一个是 C 控制台应用程序 另一个是 Asp net Web 应用程序 我正在使用 SignalR 连接两者 这是我的 C 控制台应用程序 客户端 public class RoboHub public sta
  • 从 cin 读取整数序列并将它们存储在向量中

    这就是我读取整数的方法std cin并将它们存储在向量中 int number vector
  • 为什么 getch 不可移植?

    是什么使得 getch 本质上无法作为标准 C 函数包含在内 对于控制台界面来说 它是如此直观和优雅 如果没有它 要求输入单个字符总是会产生误导 因为用户可以输入多个键 更糟糕的是 您经常需要确保在读取控制台输入后清除标准输入 这甚至不是作
  • 查找文本文件中每行的行大小

    如何计算每行中的字符或数字数量 是否有类似 EOF 的东西更像是行尾 您可以遍历行中的每个字符并不断增加计数器直到行尾 n 遇到 确保以文本模式打开文件 r 而不是二进制模式 rb 否则流不会自动将不同平台的行结束序列转换为 n 人物 这是
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js
  • 使用 ImageResizer 获取图像尺寸的最佳方法

    我正在将现有的 MVC 4 网站从自制用户文件上传切换为在上传时使用 ImageResizer 调整文件大小 我在文档中看到我不应该使用 System Drawing 但我无法找出任何其他获取图像尺寸的方法 尺寸是来自原始图像还是调整大小的

随机推荐

  • Sql Query帮助从两个表中获取不匹配的记录

    我正在尝试从 2 个表中获取不匹配的记录 For ex TableA ID Account 1 Acc1 2 Acc2 3 Acc3 TableB Opp Accountid Opp1 1 Opp2 2 Opp3 4 我需要知道哪个 acc
  • Gradle 的 PMD 插件:什么是可接受的参数?

    Java 1 7 0 40 摇篮1 10 我从未使用过 Gradle 的 PMD 插件 并且在尝试将规则集添加到我的项目时遇到了麻烦build gradle The Pmd 文档 http www gradle org docs curre
  • 在 Git 中使用替代 diff 算法

    Because git是为源代码设计的 它的默认值diff算法将线视为不可分割的最小单位 我正在尝试编辑一些在第 80 列自动换行的 Markdown 文件 添加句子可能会导致段落的其余部分被标记为已更改 有没有办法让 Git 使用更适合文
  • 使用 ssh 的 TRAMP 不会获取 .bash_profile / .profile

    我正在使用 Aquamacs 适用于 OSX 的图形 emacs 使用 emacs 24 和 ranp 版本 2 2 3 来编辑远程服务器上的一些文件 TRAMP 设置使用ssh并且在编辑文件方面工作得很好 编译失败是因为编译器不在路径中
  • bash 中的间接变量赋值

    似乎在 bash 中进行间接变量设置的推荐方法是使用eval var x val foo eval var val echo x gt foo 问题是常见的eval var x val 1 n pwd eval var val bad ou
  • C语言中的*和&有什么区别?

    我正在学习 C 但我仍然不确定我是否理解两者之间的区别 and yet 请允许我尝试解释一下 int a Declares a variable int b Declares a pointer int c Not possible a 1
  • JWT 令牌的最大大小是多少?

    我需要知道的最大长度 JSON Web 令牌 JWT 规格中没有相关信息 难道说 长度没有限制吗 我也一直在努力寻找这个 我会说 尝试并确保它是7kb 以下 虽然 JWT 在规范中没有定义上限 http www rfc editor org
  • Rmarkdown:在选项卡集下添加标题

    在 Rmarkdown 中我使用 tabset 将块拆分为选项卡 Tabset 1 tabset A Text under tab A B Text under tab B 我想在一些选项卡下添加一个大标题 Tabset 1 tabset
  • Java 中的 ArrayList 与 String

    我正在实现LZW算法 我已经成功地针对字符串和文本文件实现了它 并且当前正在修改我的代码以处理二进制文件 例如图像或可执行文件 因为我无法将这些文件作为字符串读取 我已经更换了String输入我的代码ArrayList
  • 如何在不使用 try-catch 的情况下检查路径是否有效?

    我想检查文件夹是否存在 如果不存在则创建它 但我不知道提供的路径是否有效 当路径无效时 会发生以下情况 string path this is an invalid path if Directory Exists path Directo
  • PayPal 的 Python 接口 - urllib.urlencode 非 ASCII 字符失败

    我正在尝试实现 PayPal IPN 功能 基本协议是这样的 客户从我的网站重定向到 PayPal 的网站以完成付款 他登录自己的帐户 授权付款 PayPal 调用我服务器上的一个页面 以 POST 形式传递详细信息 详细信息包括个人姓名
  • 上传的文件未保存到文件系统

    Context 我正在为我正在构建的 CMS 创建媒体库 基本功能包括上传文件并将其存储在文件系统中 但是 它会为保存的文件创建一个 id 目前我正在通过我构建的内容进行测试localhost db Files Add mediafile
  • Jira 插件自定义字段值如何在 .vm 模板中得到处理

    吉拉服务器 7 2 1 自定义字段插件 问题遵循此讨论 不明白 方法 getSingularObjectFromString 是做什么的 https stackoverflow com questions 17925377 cant und
  • Google表格公式中的数字增量

    在 Google Sheets 数据库中 我建立了一个公式 以便为一系列公司分配参考号 每个公司都应该有其唯一的编号 其形式为RET00XX其中 XX 代表唯一的公司编号 我希望这些数字是连续的 从 1 开始 然后继续 1 每当在数据库中插
  • Python 交换函数

    我很难用 Python 表达这一点 这是需要做什么的描述 swap cards int int 列表 gt NoneType swap cards 3 2 1 4 5 6 0 5 3 2 1 4 5 0 6 swap cards 3 2 1
  • 需要正则表达式来匹配多行,直到在公共分隔符之间找到匹配

    我正在尝试编写一个正则表达式 它将从日志文件返回多行匹配 使用下面的示例 我想匹配整个 事务 其开头和结尾与日志中所有其他事务 开始和结束 的文本相同 然而 在这些行之间有一个自定义标识符 在本例中是一个电子邮件地址 可以将一笔交易与另一笔
  • 如何将 Fluent NHibernate Automapping 与实体中相同类型的多个列表一起使用?

    看来 NHibernate 无法自动映射实体中给定类型的多个 IList 考虑以下两个实体 基于 Fluent NHibernate 源代码中包含的 Examples FirstProject 示例代码 public class Emplo
  • 如何在 LESS CSS 嵌套类上指定 html 标签?

    我有一个类用于article and a sectionHTML5 标签 在家里
  • 在创建位图之前如何从InputStream知道位图的大小?

    我需要在创建图像之前对其进行缩放 并且仅当图像超过 1024KB 例如 时才进行缩放 通过执行以下操作 我可以缩放图像 但我只需要缩放大于给定尺寸的图像 Bitmap bmImg null InputStream is url openSt
  • 如何在不等待事件侦听器运行的情况下触发事件?

    我对 NET C 中的事件有疑问 我必须为几种情况编写代码 在这些情况下 我正在运行后台任务 并且我想通知主线程或控制器类发生了某些事情 例如任务已完成或完成了文件复制 但我不这样做不希望后台任务等待主线程的委托来处理事件 我想做一些类似消