2

バックグラウンド

まず、System.Actionインスタンスを作成します。

PS C:\Users\KnutKristian> $a = [Action]{}

メンバーを見てみると:

PS C:\Users\KnutKristian> $a | gm

   TypeName: System.Action

Name              MemberType Definition                                        
----              ---------- ----------                                        
BeginInvoke       Method     System.IAsyncResult BeginInvoke(System.AsyncCal...
Clone             Method     System.Object Clone(), System.Object ICloneable...
DynamicInvoke     Method     System.Object DynamicInvoke(Params System.Objec...
EndInvoke         Method     void EndInvoke(System.IAsyncResult result)        
Equals            Method     bool Equals(System.Object obj)                    
GetHashCode       Method     int GetHashCode()                                 
GetInvocationList Method     System.Delegate[] GetInvocationList()             
GetObjectData     Method     void GetObjectData(System.Runtime.Serialization...
GetType           Method     type GetType()                                    
Invoke            Method     void Invoke()                                     
ToString          Method     string ToString()                                 
Method            Property   System.Reflection.MethodInfo Method {get;}        
Target            Property   System.Object Target {get;}

BeginInvoke署名:

PS C:\Users\KnutKristian> $a.BeginInvoke.OverloadDefinitions
System.IAsyncResult BeginInvoke(System.AsyncCallback callback, System.Object ob
ject)

begin invoke を実行しようとすると、次のエラーが発生します。

PS C:\Users\KnutKristian> $a.BeginInvoke($null, $null)
Exception calling "BeginInvoke" with "2" argument(s): "The object must be a run
time Reflection object."
At line:1 char:1
+ $a.BeginInvoke($null, $null)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

ものを指定しても役に立ちません:

PS C:\Users\…> $a.BeginInvoke([AsyncCallback]{param([IAsyncResult] $a)}, '')
Exception calling "BeginInvoke" with "2" argument(s): "The object must be a run
time Reflection object."
At line:1 char:1
+ $a.BeginInvoke([AsyncCallback]{param([IAsyncResult] $a)}, '')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

いくつかの例外情報:

PS C:\Users\KnutKristian> $Error[0].Exception.InnerException | gm


   TypeName: System.ArgumentException

Name             MemberType Definition                                         
----             ---------- ----------                                         
Equals           Method     bool Equals(System.Object obj), bool _Exception....
GetBaseException Method     System.Exception GetBaseException(), System.Exce...
GetHashCode      Method     int GetHashCode(), int _Exception.GetHashCode()    
GetObjectData    Method     void GetObjectData(System.Runtime.Serialization....
GetType          Method     type GetType(), type _Exception.GetType()          
ToString         Method     string ToString(), string _Exception.ToString()    
Data             Property   System.Collections.IDictionary Data {get;}         
HelpLink         Property   string HelpLink {get;set;}                         
HResult          Property   int HResult {get;}                                 
InnerException   Property   System.Exception InnerException {get;}             
Message          Property   string Message {get;}                              
ParamName        Property   string ParamName {get;}                            
Source           Property   string Source {get;set;}                           
StackTrace       Property   string StackTrace {get;}                           
TargetSite       Property   System.Reflection.MethodBase TargetSite {get;}


PS C:\Users\KnutKristian> $Error[0].Exception.InnerException |
    fl Message, ParamName, InnerException -Force


Message        : The object must be a runtime Reflection object.
ParamName      : 
InnerException : 

質問

  1. メッセージは何ですか

    オブジェクトは、実行時の Reflection オブジェクトである必要があります。

    この文脈での意味は?私が見る限り、ここには .NET オブジェクトしかありません。PowerShell 固有の詳細について不平を言っているのではないでしょうか?

  2. BeginInvokeメソッドを正常に実行するにはどうすればよいですか?

4

2 に答える 2

1

以下のコードを試してください。

[Action]{}|%{$_.BeginInvoke($null, $null)}


IsCompleted            : True
AsyncDelegate          : System.Action
AsyncState             :
CompletedSynchronously : False
EndInvokeCalled        : False
AsyncWaitHandle        : System.Threading.ManualResetEvent
NextSink               :

RunTimeType については、次の記事を参照して ください http://msdn.microsoft.com/en-us/library/ms172329.aspx

于 2013-02-13T17:20:02.887 に答える
0

物事を非同期に実行するには、試すことができます(マルチjobsプロセスの方法で、あまり効率的ではありません) 。RunspacePool

于 2013-02-13T05:02:17.047 に答える