eventhandler似乎创建了新的线程

时间:2015-10-29 21:31:56

标签: c# multithreading eventhandler

我正在使用FileSystemWatcher类,并注意到创建的事件的eventhandler在一个单独的线程上运行。我试图理解多线程编程,并且给人的印象是你获得的唯一线程是主线程。

我认为当你想要另一个线程时,你需要明确地创建它。我很困惑为什么eventhandler方法中的代码运行在与主线程不同的线程中。

LocationListener

我希望有人可以为我澄清一下。感谢

1 个答案:

答案 0 :(得分:0)

你被误解了。 不是,系统中唯一的线程是您明确创建的线程。您可以使用其他API或库(包括Java附带的“核心”库),这些库可以自由创建他们需要的任何线程,以实现和提供他们宣传的服务。在许多情况下,没有其他方法可以创建自己的线程。

一些例子:

  1. 您正在使用的文件观察程序服务。某些东西需要与操作系统交互并检测文件系统中的某些内容是否已更改。监视和回调与您的主线程异步发生(即并行且与时间无关)。
  2. Swing(GUI)。这必须在另一个线程上运行,以便UI可以工作(并保持响应),即使其他线程(如主线程)正在做其他事情。
  3. 垃圾收集器线程在后台运行,并定期回收内存以供重用。
  4. 修改

    回答有关如何知道api何时使用自己的线程进行回调的问题:

    1. 查看文档。对于优质的apis,如核心 apis,这种事情经常被记录下来。
    2. 作为一般的经验法则,您可以假设任何进行回调的api都会使用自己的线程来执行此操作(通常情况并非如此)。
    3. 尝试学习(或预期或猜测)图书馆内部如何运作。再一次,文档是一个很好的起点。如果你知道它有自己的线程,并且如果它进行回调,那么这些回调很可能会在这些线程上发生。
    4. 使用一些常识。除非你先打电话给api,否则api不能使用你的(主要或其他)线程给你回调。为了在一段任意时间内工作,api需要在一段时间内独占你的线程,这意味着你将无法将该线程用于其他任何事情。