在Powershell和C#之间共享内存

时间:2014-08-01 06:57:48

标签: c# multithreading powershell

我正在开发一个C#的日志搜索软件,该软件的底层是由PowerShell实现的。有两个理论,一个线程调用powershell来搜索日志,日志搜索功能是由powershell实现的,它将在完成执行powershell时给出结果。但我希望实时获取日志。我希望powershell将已搜索的日志放入队列。和另一个C#线程从队列中获取结果。我已经尝试编写powershell已经获取文件的日志,并且C#thread读取该文件。但它会失败,因为该文件被另一个进程(powershell)占用。现在我想在powershell和C#之间共享内存,这意味着powershell可以运行C#变量,这样我就可以在PowerShell搜索日志时将日志放入队列。请你告诉我怎样才能实现它?感谢。

1 个答案:

答案 0 :(得分:1)

这里有几个选项。首先,您不必使用PowerShell的文件输出命令(Out-File / Set-Content)。您可以直接从PowerShell使用.NET FileStream / StreamWriter类,它允许您控制FileAccess / FileShare选项。其次,您可以创建ConcurrentQueue(或BlockingCollection)并将其提供给PowerShell进行写入。第三,你可以使用MSMQ。第四,虽然我没有亲自尝试过,但我不明白为什么.NET内存映射功能在PowerShell中不起作用。最后两个选项对我来说似乎有些过分。 : - )