Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 关于多线程.Net的问题_Vb.net_Multithreading - Fatal编程技术网

Vb.net 关于多线程.Net的问题

Vb.net 关于多线程.Net的问题,vb.net,multithreading,Vb.net,Multithreading,我们使用多线程侦听器概念开发了一个vb.net应用程序,并为每个要监视的文件夹开发了一个专用线程。这样,我们就可以同时跟踪每个文件夹中的传入文件 目前,每当我们收到多个大容量文件时,我们都会面临一个问题,文件的并行处理会因线程概念而延迟,或者有时会失败。我们需要实现与其他概念相同的逻辑,以避免多线程。请提供您的建议。或者,是否可以使用相同的线程概念实现性能调优?请指导我。我想可能对您有所帮助的是文件系统监视器和后台工作子系统的组合 有关FileSystemMonitor,请检查此处 基本上,您

我们使用多线程侦听器概念开发了一个vb.net应用程序,并为每个要监视的文件夹开发了一个专用线程。这样,我们就可以同时跟踪每个文件夹中的传入文件


目前,每当我们收到多个大容量文件时,我们都会面临一个问题,文件的并行处理会因线程概念而延迟,或者有时会失败。我们需要实现与其他概念相同的逻辑,以避免多线程。请提供您的建议。或者,是否可以使用相同的线程概念实现性能调优?请指导我。

我想可能对您有所帮助的是文件系统监视器和后台工作子系统的组合

有关FileSystemMonitor,请检查此处

基本上,您可以使用一些API来注册自己,以便在特定文件夹更改(新的/更改的/删除的文件)时收到信号


再加上一个通过后台对象在后台执行工作的系统,你就不需要直接处理多个线程了。BackgroundWorkers将自动在不同的线程上旋转,以保持用户界面的响应性。

以下是我如何解决这个问题的方法

首先,使用
FileSystemWatcher
监视文件夹。当引发创建的
事件(或任何其他相关事件)时,将导致该事件的文件添加到队列中。此队列将包含所有需要处理的文件

其次,使用生产者-消费者模式来处理添加到队列中的文件。如果您的队列类型为
BlockingCollection
,则这是最容易实现的。
BlockingCollection
的好处在于它为您抽象了大多数生产者-消费者逻辑。
Take
方法阻塞,直到至少有一项添加到队列中。您可以有任意多个线程来监视此队列。他们将耐心等待,直到项目添加到队列中

下面是使用这种方法的一些优点

  • 它相对容易实现,因为
    BlockingCollection
    已经是线程安全的
  • 所需的并行度由为监视队列而创建的线程数决定
  • 处理文件不会干扰将文件添加到队列中的事件处理程序
  • 队列充当缓冲区,其内容将随着文件的显示速率与处理这些文件的速率的变化而起伏