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

时间:2016-02-27 07:45:07

标签: c# powershell threadpool

作为一个实验,我一直在C#中编写一个cmdlet,它使用了SystemFileWatcher。如您所知,SystemFileWatcher将在发生更改事件时调用委托。我想从代表发回消息给用户。具体来说,我想打电话给WriteProgress。

不幸的是,如果从“管道线程”之外的线程调用,WriteProgress以及所有其他Write *方法将抛出异常。此外,Powershell似乎没有提供SynchronizationContext,所以我不确定如何将我的delgates编组回正确的线程。

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

我在PS代码运行之前设置System.Management.Automation.Runspaces.Runspace.DefaultRunspace时运气不错。 (我为Powershell作为WCF服务器运行时这样做了)。

建议你看看这个blog,它显示在调用PS脚本之前从C#设置DefaultRunspace,这是我对我的WCF服务器的想法。