在 Powershell Cmdlet 中处理同步的最佳方法

本文关键字:最佳 方法 同步 处理 Powershell Cmdlet | 更新日期: 2023-09-27 18:36:24

作为一个实验,我一直在用C#编写一个cmdlet,它使用SystemFileWatcher。如您所知,系统文件观察程序将在发生更改事件时调用委托。我想从委托人将消息发送回给用户。具体来说,我想称之为WriteProgress。

遗憾的是,如果从"管道线程"以外的线程调用 WriteProgress 以及所有其他 Write* 方法,则会引发异常。此外,Powershell似乎没有提供同步上下文,所以我不确定如何将我的delgate封送回正确的线程。

在我看来,由于Powershell需要GUI操作才能在特定线程上执行,因此框架应该提供一种封送回该线程的方法。我错过了什么?是否有更简单的方法来同步 cmdlet 中的线程?Powershell 选择使用基于 ThreadPool 的 SynchronizationContext 是否有原因,尽管其 Write* 命令需要等效的 GUI 线程?

非常感谢!

在 Powershell Cmdlet 中处理同步的最佳方法

在我的 PS 代码运行之前,我有一些运气设置System.Management.Automation.Runspaces.Runspace.DefaultRunspace。(我为作为 WCF 服务器运行的 Powershell 执行此操作)。

建议您查看此博客,其中显示了在调用 PS 脚本之前从 C# 设置 DefaultRunspace,这是我想到我的 WCF 服务器的地方。