Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 22992|Jawab: 2

[Sumber] Penjelasan terperinci tentang beberapa cara untuk memecahkan masalah program C# yang hanya memungkinkan satu instance untuk berjalan

[Salin tautan]
Diposting pada 08/12/2016 13.11.13 | | |

Metode 1:
Gunakan variabel mutex utas. Tentukan variabel muteks untuk menentukan apakah instans sedang berjalan.
Ubah fungsi Main() di file program.cs ke kode berikut:




Catatan: Dalam program, pernyataan System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); untuk membuat variabel mutex run, di mana "single_test" adalah nama mutex, dan ketika metode ini kembali, jika mutex lokal atau mutex sistem penamaan yang ditentukan dibuat, nilai boolean runone adalah true; false jika sistem penamaan yang ditentukan mutexe sudah ada. Mutex bernama bersifat di seluruh sistem.
Metode 2: Gunakan cara menilai proses, sebelum kita menjalankan program, kita menemukan apakah ada proses dengan nama yang sama dalam prosesnya, dan posisi berjalan juga merupakan proses yang sama. Terapkan kelas Process di namespace System.Diagnostics di C# untuk mengimplementasikannya, kode utamanya adalah sebagai berikut:
1. Tambahkan fungsi ke file program.cs sebagai berikut:




2. Ubah fungsi Main () ke kode berikut:




Metode 3: Metode atom global, sebelum membuat program, pertama-tama periksa tabel atom global untuk melihat apakah ada atom tertentu A (ditambahkan pada saat pembuatan), dan hentikan pembuatannya saat ada, menunjukkan bahwa program telah menjalankan instance; Jika tidak ada, jalankan program dan ingin menambahkan atom tertentu A ke tabel atom global; Saat keluar dari program, ingatlah untuk melepaskan atom A tertentu, jika tidak, atom tersebut tidak akan dilepaskan sampai komputer dimatikan. Implementasi C# adalah sebagai berikut:
1. Deklarasikan antarmuka fungsi WinAPI

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publik statis extern UInt32 GlobalAddAtom(String lpString); Tambahkan atom
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publik statis extern UInt32 GlobalFindAtom(String lpString); Temukan atom
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publik statis eksternal UInt32 GlobalDeleteAtom(UInt32 nAtom); Hapus atom
2. Ubah fungsi Main() sebagai berikut:




3. Tambahkan kode berikut ke peristiwa FormClosed:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Hapus atom "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Di atas adalah ide umum dasar untuk membuat program yang saling eksklusif, dan saya pribadi berpikir bahwa metode pertama adalah yang paling sederhana.




Mantan:Perbedaan antara Directory.GetCurrentDirectory dan Application.StartupPath
Depan:Perbedaan antara profil klien .Net Framework4 dan .Net Framework4.0
Diposting pada 10/07/2017 06.31.21 |
Terima kasih telah berbagi
 Tuan tanah| Diposting pada 23/07/2024 14.21.04 |
Program C# hanya mengizinkan satu instance untuk menjalankan kode yang benar
https://www.itsvse.com/thread-3391-1-1.html
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com