Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengelakkan GUI Membeku Semasa Menunggu Proses Asynchronous Selesai dalam C#?

Bagaimanakah Saya Boleh Mengelakkan GUI Membeku Semasa Menunggu Proses Asynchronous Selesai dalam C#?

DDD
Lepaskan: 2025-01-04 22:05:41
asal
800 orang telah melayarinya

How Can I Avoid GUI Freezes When Waiting for Asynchronous Process Completion in C#?

Penyelesaian Proses Asynchronous dengan Process.WaitForExit()

Apabila menunggu proses selesai menggunakan Process.WaitForExit(), seseorang mungkin akan menghadapi GUI membeku kerana sifat menyekat kaedah. Untuk mengatasi isu ini, pertimbangkan untuk menggunakan pendekatan dipacu peristiwa.

Dalam .NET 4.0 dan C# 5, corak async menyediakan penyelesaian yang elegan untuk masalah ini. Kaedah sambungan WaitForExitAsync membolehkan anda menunggu secara tidak segerak untuk proses keluar. Berikut ialah kodnya:

/// <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;
}
Salin selepas log masuk

Penggunaan:

public async void Test() 
{
   var process = new Process("processName");
   process.Start();
   await process.WaitForExitAsync();

   //Do some fun stuff here...
}
Salin selepas log masuk

Dengan WaitForExitAsync, anda boleh menunggu proses selesai tanpa menyekat GUI anda. Ia menggunakan pendekatan berasaskan acara untuk memberitahu kod panggilan apabila proses keluar, membolehkan pengalaman pengguna yang lebih responsif dan interaktif.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan GUI Membeku Semasa Menunggu Proses Asynchronous Selesai dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan