none
InvokePattern的Invoke方法执行后很长时间才返回 RRS feed

  • 问题

  • 一段自动点击按钮的操作,代码如下:

    AutomationElement nextBtn = mainWin.FindFirst(TreeScope.Children,
                    new PropertyCondition(AutomationElement.NameProperty, "下一步(N) >"));
                if (nextBtn != null)
                {
                    InvokePattern nextBtnInvoker = nextBtn.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
                    nextBtnInvoker.Invoke();
                    isSuccess = true;
                }

    每次执行到nextBtnInvoker.Invoke();这一句的时候就特别慢,等很久才有返回值。从官方文档中了解到,Invoke这个方法不是异步的么?怎么会阻塞这么久呢?

    2017年12月4日 7:00

答案

  • Hi,

    感谢你在MSDN论坛发帖。

    据我所知begininvoke 是异步调用,你貌似记反了。

    从MSDN官方文档里面有这样一句话。

    Executes a delegate asynchronously on the thread the Dispatcher is associated with.  

     Invoke is synchronous and BeginInvoke is asynchronous

    这地方说明Invoke 是同步的调用,所以时间很长。 你可以尝试使用Begin Invoke 方法。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年12月5日 6:24
    版主