首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileSystemWatcher .Net 3.5

FileSystemWatcher .Net 3.5
EN

Stack Overflow用户
提问于 2014-04-21 04:42:47
回答 1查看 236关注 0票数 0

刚刚从.Net 1.1切换到3.5 on Win服务,活跃了10年,处理了200多万个文件。我有一个异步类,它使用FileSystemWatcher事件处理程序将图形打印到PDFPrinter,现在在它自己的STA线程上,归档PDF文件。PDF创建是异步的,因为现有的客户端应用程序方法允许在DateTime间隔中创建所有丢失的PDF。

(1)如果STA线程上没有剥离事件处理程序,服务将挂起。

(2)在几秒钟内只有几个PDF到达的情况下,它工作得很好。将其增加到5个PDF,不可避免地会有一个文件无法存档。将其增加到15个PDF,其中几个不会存档(所有这些都是在测试床上进行的)。在移动文件之前,我会检查它是否存在,这需要两次成功的检测(PDFPrinters往往会产生幻象文件创建事件)。我还检查对该文件的独占访问权限。更新:我在COM交互代码的不同部分尝试了另一种STA线程创建方法(通过参数化的类和方法),遇到了同样的不可靠问题(只有大约50%的线程完成)。

对于PDF,我很想设置一个定时器来归档被遗弃的文件,但我不知道何时启动定时器,以避免多个定时器尝试执行相同的归档任务(同时还存在Oracle并发问题的风险);这种设计感觉有点像皮带和吊带(负面因素)。

这是一个很常见的范例,让它变得健壮应该不是那么困难!在(1)上寻找启示,并帮助使新的STA线程可靠地完成(2)。

伪码

代码语言:javascript
复制
Test bed user interface:
    // Process 20 instrument raw data files in a loop
    // For each file:
    // 1-2 s to setup processing and retrieve metadata from database on each file
    // (A) spin off STA worker thread
    // call instrument vendor COM API to read data file
    // setup FileSystemWatcher for PDF files
    // create graphical image PDF
    // handle PDF_Created in a shell that ...
    // (B) spins off STA worker thread to 
    // archive the PDF
EN

回答 1

Stack Overflow用户

发布于 2014-04-21 18:40:27

回答(2):我必须添加代码来线性化新的STA线程或将新的STA线程与旧的MTA线程重新同步(例如,阻止父线程,直到工作线程完成)。

代码语言:javascript
复制
thread.Join();

这在伪代码中的点(A)处工作得很好,但在点(B)处工作得很好,在那里我有一些共享的字段变量,这些变量仍然需要移动到线程参数中(可能是因为不是所有的PDF都被创建)

我承认我仍然不理解为什么在网络上归档文件的FileSystemWatcher需要在STA线程上处理(问题(1))。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23187367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档