我在自动化应用程序中遇到了这种行为:当我通过调用InvokePattern.Invoke()
方法来“单击”按钮时,一切都会停止,直到自动化应用程序中click事件的处理程序完成。
虽然这可以使事情变得简单(例如,我不必编写大量代码来等待带有进度条的对话框消失,因为我只需在完成所有操作后将控件取回即可),但是我可以什么也别做。甚至在点击处理程序完成后,它还会在另一个线程中阻止对Automation API的访问。
这会在自动应用程序中的单击处理程序打开一个模式对话框时出现问题,然后我什么也不能做,除非手动关闭该对话框,否则通过自动化API对该应用程序的访问将被阻止。
有人能以某种方式解决这个问题并且可以帮助我吗?
谢谢, 卡雷尔
PS:参考文献source这么说:
Request that the control initiate its action.
/// Should return immediately without blocking.
/// There is no way to determine what happened, when it happend, or whether
/// anything happened at all
public void Invoke() { ... }
编辑:当自动运行不是.NET应用程序的Windows记事本应用程序时,它可以完美工作。对于Notepad clone(C#WinForms应用程序),它不不起作用。