C# 在添加的线程内触发事件

2024-02-20

考虑两个类;Producer and Consumer(与经典模式相同,每个都有自己的线程)。是否有可能Producer拥有一个Event which Consumer可以注册并当生产者触发事件时,消费者的事件处理程序在其自己的线程中运行吗?这是我的假设:

  • Consumer不知道是否Producer的事件被触发 在他自己的线程或另一个线程中。

  • Neither Producer nor Consumer是的后代Control所以他们没有BeginInvoke方法继承。

附言。我并不是想实施Producer - Consumer图案。这是两个简单的类,我正在尝试重构生产者,以便它包含线程。

[UPDATE]

为了进一步扩展我的问题,我试图包装一个硬件驱动程序,以尽可能简单的方式使用。例如我的包装纸将有一个StateChanged主应用程序将注册该事件,以便在硬件断开连接时收到通知。由于实际的驱动程序除了轮询之外没有其他方法来检查其存在,因此我需要启动一个线程来定期检查它。一旦它不再可用,我将触发需要在添加它的同一线程中执行的事件。我知道这是一个经典的生产者-消费者模式,但由于我试图使用我的驱动程序包装器进行简化,所以我不希望用户代码来实现消费者。

[UPDATE]

由于一些评论表明这个问题没有解决方案,我想添加几行可能会改变他们的想法。考虑到BeginInvoke可以做我想做的事,所以这不应该是不可能的(至少在理论上)。实施我自己的BeginInvoke并在内部调用它Producer这是看待它的一种方式。只是我不知道如何BeginInvoke可以!


您想要进行线程间通信。对的,这是可能的。 使用 System.Windows.Threading.Dispatcherhttp://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.aspx http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.aspx

调度程序为特定线程维护一个按优先级排列的工作项队列。 当在线程上创建 Dispatcher 时,它就成为可以与该线程关联的唯一 Dispatcher,即使 Dispatcher 已关闭。 如果您尝试获取当前线程的 CurrentDispatcher 并且 Dispatcher 未与该线程关联,则会创建一个 Dispatcher。创建 DispatcherObject 时也会创建 Dispatcher。如果您在后台线程上创建调度程序,请确保在退出线程之前关闭调度程序。

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

C# 在添加的线程内触发事件 的相关文章

  • 与 MinGW 的静态和动态/共享链接

    我想从一个简单的链接用法开始来解释我的问题 假设有一个图书馆z它可以编译为共享库 libz dll D libs z shared libz dll 或静态库 libz a D libs z static libz a 让我想要链接它 然后
  • 带有 ASP.NET 按钮回发的 jQuery UI 对话框

    我的 ASP NET 页面上有一个运行良好的 jQuery UI 对话框 jQuery function jQuery dialog dialog draggable true resizable true show Transfer hi
  • 如何使用不同的基本路径托管 Blazor WebAssembly 应用程序

    我有一个 Blazor Webassemble NET 托管应用程序 在我们托管它的服务器上 应用程序的基本路径将是mydomain com coolapp 因此 为了尝试让应用程序在服务器上正确呈现 我一直遵循本页 应用程序基本路径 部分
  • 在 LINQ 查询中进行转换

    是否可以在 LINQ 查询中进行强制转换 为了编译器的缘故 下面的代码并不糟糕 但最好将其放入一个查询中 Content content dataStore RootControl as Controls Content List
  • 并行运行多个任务

    我有一个代理列表 每个代理都会访问不同的站点并从站点中提取所需的数据 目前它一次只做一个 但我希望同时运行 10 20 个任务 这样它就可以一次性从 20 个站点下载 而不是只下载一个 这是我目前正在做的事情 private async T
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • 无法在 CUDA 中找到 1 到 100 数字的简单和?

    我正在研究使用 CUDA 的图像处理算法 在我的算法中 我想使用 CUDA 内核找到图像所有像素的总和 所以我在cuda中制作了内核方法 来测量16位灰度图像的所有像素的总和 但我得到了错误的答案 所以我在cuda中编写了一个简单的程序来查
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • 如何从经过身份验证的 SecurityToken 中获取声明

    我将令牌作为字符串传递到 SOAP 服务中 并验证了该令牌是否有效 我现在有一个 SecurityToken 在调试模式下我可以看到所有声明 特别是我想传递到另一个方法的 userId 声明 我似乎不知道如何获得这些索赔 现在 我解码了令牌
  • 如何在 C# 中以编程方式将行添加到 DataGrid?

    正如标题所述 我正在尝试使用 C 以编程方式将行添加到 DataGrid 但我似乎无法使其工作 这是我到目前为止所拥有的 I have a DataGrid declared as dg in the XAML foreach string
  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • 我能否找出 ASP 回发时将触发哪些控制事件?

    是否有可能在发生之前获取将要触发的控制事件列表 例如在Page Load处理程序 例如 如果单击了一个按钮 我可以在button click事件处理程序被调用 您选择了一个非常棘手的问题 原因是事件触发的方式有多种 1 EVENTTARGE
  • 如何在 C 中链接目标文件?失败并显示“架构 x86_64 的未定义符号”

    因此 我尝试在我的文件 file2 c 中使用另一个 C file1 c 文件中定义的函数 为了做到这一点 我包含了 file1 file1 h 的标头 但是 每当我尝试使用 gcc 编译文件时 我都会收到以下错误 Undefined sy
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 为什么我可以在另一个函数中定义一个函数?

    请参阅下面的代码 我在另一个函数中定义了一个函数 void test1 void void test2 void printf test2 n printf test1 n int main void test1 return 0 这个用法
  • 如何防止 Lotus Notes 用户转发或复制通过 System.Net.Mail 发送的邮件?

    我想使用 SMTP 客户端 uiing microsft net 以 C 作为编程语言发送电子邮件 但是对于通过SMTP客户端发送的电子邮件 我们是否可以添加 禁止转发 或 禁止复制 等安全功能 我不希望电子邮件的收件人转发或复制电子邮件的
  • 异步/等待 - 是*并发*吗?

    我一直在考虑 C 5 中新的异步内容 并且出现了一个特殊问题 据我了解 await关键字是一个简洁的编译器技巧 语法糖来实现连续传递 http en wikipedia org wiki Continuation passing style
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我

随机推荐