2016-06-06 164 views
0

我正在使用MS UIA框架及其內置的自動化事件處理。我在WindowClosedEvent上看到意外的行爲。自動化事件處理程序被觸發不止一次

也許我在這裏做錯了什麼,但我的理解是控制檯調用應該執行一次。當我運行上面的代碼時,Console行被執行兩次。

當我的TestApp關閉時,沒有它運行的特殊事件。測試應用程序也只是一個WPF窗口。

[TestMethod] 
    public void TestMethod1() 
    { 
     Process.Start(@"TestApp.exe"); 

     Thread.Sleep(2000); //sleep to wait for proc to boot with ui 

     var windowElement = AutomationElement.RootElement.FindFirst(TreeScope.Descendants, 
      new AndCondition(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window), 
       new PropertyCondition(AutomationElement.NameProperty, "TestApp"), new PropertyCondition(AutomationElement.AutomationIdProperty, "TestAppAutomationId"))); 



     Automation.AddAutomationEventHandler(WindowPattern.WindowClosedEvent, windowElement, TreeScope.Element, 
      OnClose); 

     var windowPattern = (WindowPattern)windowElement.GetCurrentPattern(WindowPattern.Pattern); 

     windowPattern.Close(); 


     Thread.Sleep(2000); //sleep to wait for uia's event threads to fire and finish. 
    } 

    public void OnClose(object sender, AutomationEventArgs e) 
    { 
     Console.WriteLine("test"); //this is run twice during the test 
    } 

我在Windows 10

運行鍼對.NET 4.5.2如果我在這裏做得不對,將導致處理火不止一次請讓我知道。

感謝。

+0

@nouman請不要有屬性值使用大寫字母,因爲它們看起來像是在大喊大叫。 –

+0

我已經解決了這個難題 –

回答

0

該解決方案的問題是,我們發現,在回到該事件調用它返回一個值

(AutomationPropertyChangedEventArgs e) 

上述事件傳遞給函數,以便

  private void Property_Change_Event(object src, AutomationPropertyChangedEventArgs e) 
    { 
     AutomationElement sourceElement = src as AutomationElement; 
     if ( e.Property == WindowPatternIdentifiers.WindowClosedEvent) 
     { 
       //manage e.NewValue == 0 or 1 

     } 
相關問題