Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menunggu Proses Keluar dalam .NET secara Asynchronously tanpa Menyekat GUI?
Menunggu Proses Keluar Secara Asynchronous
Adalah sukar untuk menunggu proses selesai tanpa menyekat GUI menggunakan Process.WaitForExit( ). Untuk menangani perkara ini, mari kita terokai pendekatan dipacu peristiwa dan penyelesaian alternatif menggunakan corak async.
Dalam versi .NET sebelum 4.0, adalah perlu untuk mencipta urutan berasingan untuk menunggu keluar dan mencetuskan peristiwa. Walau bagaimanapun, dengan pengenalan pengaturcaraan async dalam .NET 4.0 dan C# 5, kami kini boleh mewakili proses ini dengan lebih elegan.
Penantian Asynchronous Menggunakan async dan tunggu
The corak async membolehkan kami menunggu proses keluar secara tidak segerak. Berikut ialah contoh:
/// <summary> /// Waits asynchronously for the process to exit. /// </summary> /// <param name="process">The process to wait for cancellation.</param> /// <param name="cancellationToken">A cancellation token. If invoked, the task will return immediately as canceled.</param> /// <returns>A Task representing waiting for the process to end.</returns> public static Task WaitForExitAsync(this Process process, CancellationToken cancellationToken = default(CancellationToken)) { if (process.HasExited) return Task.CompletedTask; var tcs = new TaskCompletionSource<object>(); process.EnableRaisingEvents = true; process.Exited += (sender, args) => tcs.TrySetResult(null); if(cancellationToken != default(CancellationToken)) cancellationToken.Register(() => tcs.SetCanceled()); return process.HasExited ? Task.CompletedTask : tcs.Task; }
Penggunaan:
public async void Test() { var process = new Process("processName"); process.Start(); await process.WaitForExitAsync(); //Do some fun stuff here... }
Dengan menggunakan kaedah sambungan WaitForExitAsync, anda boleh menunggu proses keluar secara tidak segerak tanpa menyekat GUI . Kata kunci tunggu menjeda pelaksanaan kaedah Ujian sehingga proses selesai atau token pembatalan dicetuskan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menunggu Proses Keluar dalam .NET secara Asynchronously tanpa Menyekat GUI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!