Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menunggu Proses Keluar secara Asynchronous dalam C# Tanpa Membekukan GUI?

Bagaimanakah Saya Boleh Menunggu Proses Keluar secara Asynchronous dalam C# Tanpa Membekukan GUI?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-04 14:25:43450semak imbas

How Can I Asynchronously Wait for Process Exit in C# Without Freezing the GUI?

Menunggu Proses Keluar Secara Asynchronous

Dalam banyak aplikasi, adalah penting untuk menunggu proses untuk keluar sebelum meneruskan lebih lanjut. Walau bagaimanapun, menggunakan Process.WaitForExit() boleh menyebabkan antara muka pengguna grafik (GUI) menjadi beku. Untuk mengelakkan isu ini, penyelesaian berasaskan acara atau berasaskan benang diperlukan.

Pendekatan Berasaskan Peristiwa

Setakat .NET 4.0/C# 5, async corak menyediakan cara yang lebih elegan untuk mewakili proses menunggu. Kaedah WaitForExitAsync() boleh ditambah pada kelas Proses, membolehkan aplikasi menunggu secara tak segerak untuk proses keluar:

public static Task WaitForExitAsync(this Process process, CancellationToken cancellationToken = default(CancellationToken))

Di dalam kaedah:

  • Jika proses telah pun keluar, kaedah tersebut mengembalikan tugasan yang telah selesai serta-merta.
  • Jika tidak, a TaskCompletionSource dibuat dan sifat EnableRaisingEvents proses ditetapkan kepada benar.
  • Pengendali acara dilampirkan pada acara Keluar proses, yang menetapkan hasil sumber penyelesaian tugas apabila proses keluar.
  • Jika token pembatalan disediakan, ia didaftarkan untuk membatalkan tugas jika dipanggil.
  • Tugas dikembalikan, yang mana selesai apabila proses keluar atau apabila token pembatalan digunakan.

Penggunaan

Untuk menggunakan kaedah WaitForExitAsync():

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

    // Do some fun stuff here...
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menunggu Proses Keluar secara Asynchronous dalam C# Tanpa Membekukan GUI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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