Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah skrin percikan menunggu benang latar belakang selesai sebelum ditutup?

Bagaimanakah skrin percikan menunggu benang latar belakang selesai sebelum ditutup?

Barbara Streisand
Barbara Streisandasal
2025-01-25 08:46:10983semak imbas

How Can a Splash Screen Wait for a Background Thread to Finish Before Closing?

Memastikan Keterlihatan Skrin Percikan Sehingga Thread Latar Belakang Selesai

Artikel ini memperincikan cara membuat skrin percikan yang kekal dipaparkan sehingga utas latar belakang selesai diproses. Skrin percikan, berada dalam kelas SplashScreen yang berasingan, muncul sebelum borang permohonan utama.

Kelas SplashScreen menggabungkan kaedah, GetFromServer, mensimulasikan pengambilan dan pemprosesan data pelayan. Kaedah ini berjalan pada benang yang berasingan, membenarkan benang utama memaparkan skrin percikan serentak. Penyegerakan adalah penting untuk mengelakkan skrin percikan ditutup lebih awal.

Untuk mencapai penyegerakan ini, ManualResetEvent digunakan:

<code class="language-csharp">private ManualResetEvent _threadFinished = new ManualResetEvent(false);

private void GetFromServer()
{
    // ... (Existing GetFromServer method code) ...

    // Signal thread completion
    _threadFinished.Set();
}</code>

Kaedah DisplaySplash dalam kelas SplashScreen diubah suai untuk menunggu urutan selesai sebelum menyembunyikan skrin percikan:

<code class="language-csharp">private void DisplaySplash()
{
    // ... (Existing DisplaySplash method code) ...

    // Wait for thread completion
    _threadFinished.WaitOne();

    // ... (Code to hide the splash screen) ...
}</code>

Akhir sekali, kaedah Main memulakan skrin percikan dan menggunakan Application.Run dengan ShowDialog() pada borang utama untuk menyekat utas utama sehingga skrin percikan ditutup dengan anggun:

<code class="language-csharp">[STAThread]
static void Main()
{
    using (var splashScreen = new SplashScreen(_tempAL))
    {
        splashScreen.Show();

        Application.Run(new Form1(_tempAL));
    }
}</code>

Pendekatan ini menjamin keterlihatan skrin percikan sehingga urutan latar belakang (GetFromServer) menamatkan operasinya, menghasilkan pengalaman pengguna yang digilap.

Atas ialah kandungan terperinci Bagaimanakah skrin percikan menunggu benang latar belakang selesai sebelum ditutup?. 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