System.Management를 사용하여 비동기 쿼리를 수행하는 방법
Configuration Manager 클라이언트 WMI(Windows Instrumentation) 네임스페이스에서 비동기 쿼리를 수행하려면 WQL 쿼리를 ManagementObjectSearcher
지정하는 개체를 만듭니다. 그런 다음 각 쿼리 결과 및 쿼리의 끝에 대한 이벤트 처리기를 지정하는 을 만듭니 ManagementOperationObserver
다.
개체 Get 메서드가 개체와 함께 호출되면 비동기 쿼리가 ManagementOperationObserver
실행됩니다ManagementObjectSearcher
.
비동기 쿼리를 수행하려면
Configuration Manager 클라이언트 WMI 네임스페이스에 대한 연결을 설정합니다. 자세한 내용은 System.Management를 사용하여 Configuration Manager 클라이언트 WMI 네임스페이스에 연결하는 방법을 참조하세요.
개체를 만듭니다
ManagementObjectSearcher
.개체를 만듭니다
ManagementOperationObserver
.메서드를
ObjectReadyEventHandler
개체에ManagementOperationObserver
추가합니다.에
CompletedEventHandler
메서드를 추가합니다ManagementOperationObserver
.개체 Get 메서드를
ManagementObjectSearcher
호출하고 개체를ManagmentOperationObserver
매개 변수로 입력합니다.쿼리가 실행되는 동안에도 애플리케이션이 계속 실행되는지 확인합니다.
예시
다음 C# 코드 예제에서는 클라이언트에 설치된 구성 요소를 비동기적으로 쿼리합니다.
샘플 코드 호출에 대한 자세한 내용은 System.Management를 사용하여 WMI 클래스 메서드를 호출하는 방법을 참조하세요.
public void EnumerateInstancesAsync(ManagementScope scope)
{
try
{
// Instantiate an object searcher with the query.
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(scope, new
SelectQuery("CCM_InstalledComponent"));
// Create a results watcher object
// and handler for results and completion.
ManagementOperationObserver results = new
ManagementOperationObserver();
// Attach handler to events for results and completion.
results.ObjectReady += new
ObjectReadyEventHandler(this.NewObject);
results.Completed += new
CompletedEventHandler(this.Done);
Console.WriteLine("Installed Components");
Console.WriteLine("--------------------");
Console.WriteLine();
// Call the asynchronous overload of Get()
// to start the enumeration.
searcher.Get(results);
// Do something else while results
// arrive asynchronously.
while (!this.Completed)
{
System.Threading.Thread.Sleep(1000);
}
this.Reset();
}
catch (ManagementException e)
{
Console.WriteLine("Failed to run query: " + e.Message);
throw;
}
}
private bool isCompleted = false;
private void NewObject(object sender,
ObjectReadyEventArgs obj)
{
try
{
Console.WriteLine("Name: {0}, Version = {1}",
obj.NewObject["DisplayName"],
obj.NewObject["Version"]);
}
catch (ManagementException e)
{
Console.WriteLine("Error: " + e.Message);
}
}
private bool Completed
{
get
{
return isCompleted;
}
}
private void Reset()
{
isCompleted = false;
}
private void Done(object sender,
CompletedEventArgs obj)
{
isCompleted = true;
}
이 예제 메서드에는 다음 매개 변수가 있습니다.
매개 변수 | 형식 | 설명 |
---|---|---|
Scope |
ManagementScope |
유효한 입니다 ManagementScope . 경로는 root\ccm이어야 합니다. |
코드 컴파일
네임 스페이스
시스템.
System.Management.
어셈블리
System.Management.
강력한 프로그래밍
발생할 수 있는 예외는 System.Management.ManagementException입니다.
참고 항목
Configuration Manager WMI 프로그래밍 정보
System.Management를 사용하여 WMI 클래스 메서드를 호출하는 방법
System.Management를 사용하여 Configuration Manager 클라이언트 WMI 네임스페이스에 연결하는 방법
System.Management를 사용하여 동기 쿼리를 수행하는 방법
System.Management를 사용하여 WMI 개체를 읽는 방법
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기