不想等待方法返回

时间:2012-04-24 19:52:57

标签: c# qtp

有没有办法“告诉”C#不要等待对象的方法返回?

使用COM(VbScript)我可以在不等待它返回的情况下触发方法,所以我想以同样的方式使用C#。

VbScript代码:

Dim qtApp
Set qtApp = CreateObject("QuickTest.Application")
qtApp.Open("C:\Temp\Test")

qtApp.Run   '// VbScript does not wait for this method to finish

Set qtApp = Nothing

C#代码:

//Refer the object
var qtApp = new QuickTest.Application();
//Open the test
qtApp.Open("C:\\Temp\\Test");

qtApp.Test.Run(); //<<== @ this step my code is waiting for the Run method to return
qtApp.Test.Pause(); //<<== This line is never executed until Run returns

评论:

  1. 引用的对象(QuickTestApplication)是COM对象具有Run和Pause的方法(如上面的代码中所述)。
  2. 对我而言QuickTestApplication是一个黑盒子
  3. 我不想使用ThreadASync(基本上是线程),但QuickTestApplication构建方法
  4. 如果可以使用C#

    完成,我真的想找到简单的答案

3 个答案:

答案 0 :(得分:3)

异步执行。

http://msdn.microsoft.com/en-us/library/2e08f6yc.aspx
http://msdn.microsoft.com/en-us/magazine/cc301332.aspx

  

.NET Framework使您可以异步调用任何方法。至   这样做你定义一个与方法具有相同签名的委托   你想打电话;公共语言运行库自动定义   这个委托的BeginInvoke和EndInvoke方法,带有   适当的签名。

     

BeginInvoke方法启动异步调用。 EndInvoke方法检索异步调用的结果。

答案 1 :(得分:2)

您可以使用“任务”,然后运行该方法。我还没有使用过这些,但我相信这是他们在C#中的目的。

来自MSDN(http://msdn.microsoft.com/en-us/library/dd537609.aspx):

“任务表示异步操作,在某些方面它类似于新线程或ThreadPool工作项的创建,但处于更高的抽象级别。任务提供两个主要好处:

更有效,更可扩展地使用系统资源。

在幕后,任务排队到ThreadPool,后者已通过算法(如爬山)进行了增强,这些算法可确定并调整最大化吞吐量的线程数。这使得任务相对轻量级,您可以创建其中的许多任务以实现细粒度的并行性。为了补充这一点,采用了众所周知的工作窃取算法来提供负载平衡。

比线程或工作项更多的程序控制。

任务和围绕它们构建的框架提供了一组丰富的API,支持等待,取消,延续,强大的异常处理,详细状态,自定义调度等。

由于上述两个原因,在.NET Framework 4中,任务是编写多线程,异步和并行代码的首选API。“

// Create a task and supply a user delegate by using a lambda expression.
var taskA = new Task(() => Console.WriteLine("Hello from taskA."));

// Start the task.
taskA.Start();

// Output a message from the joining thread.
Console.WriteLine("Hello from the calling thread.");


/* Output:
* Hello from the joining thread.
* Hello from taskA. 
*/

答案 2 :(得分:1)

QTP自动化允许异步运行测试,请查看文档:

Documentation for Run method

因此,您不必像在示例中那样运行Run属性(而不是QTP应用程序)上的普通Test,而是必须提供默认结果选项,然后指定False WaitOnReturn

Set resOpt = CreateObject("QuickTest.RunResultsOptions")
qtApp.Test.Run resOpt, False