我正在创建一个监视ftp日志的win服务,当文件上传时,我想启动一个外部应用程序,比如powershell脚本,来处理文件。我的问题是,当我这样做时,我想把它转移到另一个线程中,或者我应该等到它完成然后继续前进。
这个过程已经在一个线程中(服务将监视多个服务器)并且线程启动线程的想法让我担心。这有什么值得担心的,或者这是我帽子里有太多锡纸的情况。
答案 0 :(得分:2)
好吧,以模块化方式对其进行编码,不要担心线程。如果您认为您的应用程序将受益于多线程方法,那么请解决它。如果您正确地构建组件,那么螺纹部件将更自然地适合。
在应用程序一开始就解决线程问题总是让我觉得过早优化。首先构建组件并担心以后如何对它们进行线程化。
[编辑]我绝不建议你根本不考虑线程。每个组件都需要构建,具有多线程使用的潜力 - 这是所有应用程序中的防御性和智能实践。我的意思是不要太担心应用程序将如何处理线程以及如何首先设置应用程序的线程管理。
答案 1 :(得分:1)
我认为更重要的问题是你从另一个线程中产生了什么?如果您不需要并行执行代码,则不要这样做。如果你这样做,应该没有问题。如果您关心子线程创建自己的线程,那么将线程创建委托给ThreadPool
。
答案 2 :(得分:1)
主要问题:您是否需要了解该过程的结果?如果你可以解雇并忘记,那就这样做 - 这更容易。如果你需要结果,那么等待它。
另外,您是否考虑过使用FileSystemWatcher?它远程工作。
答案 3 :(得分:1)
虽然有点偏离主题,但由于你提到你将推出一个powershell脚本,我想指出通过powershell“runspace”在进程中运行脚本的选项。这是一个最小示例:
using System.Management.Automation;
static class PoshExec
{
static void Exec(string scriptFilePath)
{
(new RunspaceInvoke()).Invoke("& " + scriptFilePath);
}
}
添加引用 c:\ Program Files \ Reference Assemblies \ Microsoft \ WindowsPowerShell \ v1.0 \ System.Management.Automation.dll