【问题标题】:Watch events in a separate thread c# [duplicate]在单独的线程c#中观看事件[重复]
【发布时间】:2014-02-20 07:22:20
【问题描述】:

我有一个程序应该持续监视来自外部源 (FileSystemWatcher) 的事件,而源需要我的处理代码快速,否则我可能会丢失下一个事件。

但在任何时候我的程序都可能执行繁重的操作。

First question: 

如果在繁重的操作期间引发了外部事件,我的程序会在处理事件之前完成操作吗?

Second question:

我是 Threading 的新手,所以我的主要问题是如何创建一个单独的永久线程来执行 only 来自外部源的事件处理? 我的第一种方法是,这个线程将简单地存储主代码准备访问的数据,并使用繁重的编码来处理存储的数据。

谢谢。

【问题讨论】:

  • 你读过异步和等待吗? msdn.microsoft.com/en-us/library/hh191443.aspx
  • 如果我正确理解了您的问题,那么您可以做的是在引发事件时,保存事件的所有上下文,并将工作项发布到线程池,并让池线程执行繁重的工作并让原始线程非常迅速地返回到外部代码。这假设一旦返回线程,您保存的上下文不会失效。
  • 你的格式很烦人。请查看选项并使用理智的东西。 stackoverflow.com/editing-help - 谢谢。 (不,格式为code 应该是标题粗体强调或编号列表是不合理的。)

标签: c# multithreading event-handling


【解决方案1】:

事件将在触发事件的线程上运行。如果您的应用程序正在执行昂贵的操作并且事件是从另一个线程启动的,那么这两件事是独立的,以免两个线程之间同步。

如果您通过对事件进行轮询来处理事件,则一项活动将阻止下一项活动。

不知道您正在处理什么事件以及它们是如何引发的,这只是最通用的建议。

--- 编辑

是的

Does FileSystemWatcher create its own thread?

【讨论】:

  • 这是一个引发事件的 FileSystemWatcher。你的意思是我不需要担心,因为事件已经在一个单独的线程(FileSystemWatcher 线程)中处理了???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多