为了账号安全,请及时绑定邮箱和手机立即绑定

是否存在与Process.Start异步的等效项?

是否存在与Process.Start异步的等效项?

C#
慕沐林林 2019-10-06 14:45:51
就像标题所示,是否有Process.Start我可以等待的等效项(允许您运行其他应用程序或批处理文件)?我正在玩一个小型控制台应用程序,这似乎是使用async和await的理想场所,但是我找不到这种情况的任何文档。我在想的是以下几方面的东西:void async RunCommand(){    var result = await Process.RunAsync("command to run");}
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

这是另一种方法。与svick和Ohad的答案类似的概念,但是对Process类型使用扩展方法。


扩展方式:


public static Task RunAsync(this Process process)

{

    var tcs = new TaskCompletionSource<object>();

    process.EnableRaisingEvents = true;

    process.Exited += (s, e) => tcs.TrySetResult(null);

    // not sure on best way to handle false being returned

    if (!process.Start()) tcs.SetException(new Exception("Failed to start process."));

    return tcs.Task;

}

包含方法中的示例用例:


public async Task ExecuteAsync(string executablePath)

{

    using (var process = new Process())

    {

        // configure process

        process.StartInfo.FileName = executablePath;

        process.StartInfo.UseShellExecute = false;

        process.StartInfo.CreateNoWindow = true;

        // run process asynchronously

        await process.RunAsync();

        // do stuff with results

        Console.WriteLine($"Process finished running at {process.ExitTime} with exit code {process.ExitCode}");

    };// dispose process

}


查看完整回答
反对 回复 2019-10-06
  • 3 回答
  • 0 关注
  • 549 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信