CompletedEventHandler デリゲート
アセンブリ: System.Management (system.management.dll 内)


メソッドを非同期に呼び出す例を次に示します。Win32_Process.Create メソッドは、Calc.exe の新しいプロセスを作成するために呼び出されます。
Imports System Imports System.Management Public Class InvokeMethodAsync Private isFinished As Boolean = False Private returnObj As ManagementBaseObject Public Sub New() ' Get the object on which the method ' will be invoked Dim processClass As ManagementClass = _ New ManagementClass("Win32_Process") ' Create a results and completion handler Dim handler As ManagementOperationObserver = _ New ManagementOperationObserver AddHandler handler.Completed, _ AddressOf Me.Completed ' Invoke method asynchronously Dim inParams As ManagementBaseObject = _ processClass.GetMethodParameters("Create") inParams("CommandLine") = "calc.exe" processClass.InvokeMethod( _ handler, "Create", inParams, Nothing) ' Do something while method is executing While (Not Me.IsComplete) System.Threading.Thread.Sleep(1000) End While End Sub ' Property allows accessing the result ' object in the main function Private Function ReturnObject() As ManagementBaseObject Return returnObj End Function ' Delegate called when the method completes ' and results are available Private Sub NewObject(ByVal sender As Object, _ ByVal e As ObjectReadyEventArgs) Console.WriteLine("New Object arrived!") returnObj = e.NewObject End Sub ' Used to determine whether the method ' execution has completed Private Function IsComplete() As Boolean Return isFinished End Function Private Sub Completed(ByVal sender As Object, _ ByVal e As CompletedEventArgs) isFinished = True Console.WriteLine("Completed method invocation.") End Sub Public Shared Function _ Main(ByVal args() As String) As Integer Dim invokeMethod As New InvokeMethodAsync Return 0 End Function End Class
using System; using System.Management; public class InvokeMethodAsync { private bool isComplete = false; private ManagementBaseObject returnObject; public InvokeMethodAsync() { // Get the object on which the method // will be invoked ManagementClass processClass = new ManagementClass("Win32_Process"); // Create a results and completion handler ManagementOperationObserver handler = new ManagementOperationObserver(); handler.Completed += new CompletedEventHandler(this.Completed); // Invoke method asynchronously ManagementBaseObject inParams = processClass.GetMethodParameters("Create"); inParams["CommandLine"] = "calc.exe"; processClass.InvokeMethod( handler, "Create", inParams, null); // Do something while method is executing while(!this.IsComplete) { System.Threading.Thread.Sleep(1000); } } // Property allows accessing the result // object in the main function private ManagementBaseObject ReturnObject { get { return returnObject; } } // Delegate called when the method completes // and results are available private void NewObject(object sender, ObjectReadyEventArgs e) { Console.WriteLine("New Object arrived!"); returnObject = e.NewObject; } // Used to determine whether the method // execution has completed private bool IsComplete { get { return isComplete; } } private void Completed(object sender, CompletedEventArgs e) { isComplete = true; Console.WriteLine("Method invoked."); } public static void Main() { InvokeMethodAsync invokeMethod = new InvokeMethodAsync(); return; } }

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- CompletedEventHandler デリゲートのページへのリンク