Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 22992|Yanıt: 2

[Kaynak] Sadece bir örneğin çalışmasına izin veren bir C# programının sorununu çözmenin birkaç yolunun ayrıntılı açıklaması

[Bağlantıyı kopyala]
Yayınlandı 8.12.2016 13:11:13 | | |

Yöntem 1:
Thread mutex değişkenleri kullanın. Bir örneğin çalışıp çalışmadığını belirlemek için mutex değişkenleri tanımlayın.
program.cs dosyasındaki Main() fonksiyonunu aşağıdaki koda değiştirin:




Not: Programda, System.Threading.Mutex ifadesi run = new System.Threading.Mutex(true, "single_test", out runone); mutex değişkeni çalıştırmak için, burada "single_test" mutex adı olur ve bu yöntem dönerse, yerel mutex veya belirli bir adlandırma sistemi mutex oluşturulursa, boolean değeri runone doğrudur; Belirtilen adlandırma sistemi mutexe zaten mevcutsa, yanlış. İsimli muteksler sistem genelinde kullanılır.
Yöntem 2: Süreci değerlendirme yöntemini kullanın; programı çalıştırmadan önce, süreçte aynı isimli bir süreç olup olmadığını ve çalışma pozisyonunun da aynı süreç olup olmadığını buluruz. Process.Diagnostics isim alanında Process sınıfını C# dilinde uygulayın, ana kod şöyledir:
1. program.cs dosyasına aşağıdaki gibi bir fonksiyon ekleyin:




2. Ana () fonksiyonunu aşağıdaki koda değiştirin:




Yöntem 3: Küresel atomik yöntem, bir program oluşturmadan önce, oluşturulma anında eklenen belirli bir atom A olup olmadığını görmek için önce küresel atom tablosunu kontrol edin ve mevcut olduğunda yaratmayı durdurun; bu da programın bir örnek çalıştırdığını gösterir; Eğer yoksa, programı çalıştırın ve küresel atom tablosuna belirli bir atom A'yı eklemek isteyin; Programdan çıkarken, belirli bir atom A'yı serbest bırakmayı unutmayın, aksi takdirde bilgisayar kapanana kadar serbest bırakılmaz. C# uygulaması şöyledir:
1. WinAPI fonksiyon arayüzünü ilan edin

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalAddAtom(String lpString); Atomlar ekle
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalFindAtom(String lpString); Atomları bulun
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom); Atomları sil
2. Ana() fonksiyonunu aşağıdaki şekilde değiştirin:




3. FormClosed etkinliğine aşağıdaki kodu ekleyin:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Atomik "jiaao_test"i sil
--------------------------------------*-------*--------*-----------------------------------------------
Yukarıdakiler, birbirini dışlayan bir program oluşturmanın temel genel fikridir ve şahsen ilk yöntemin en basit olduğunu düşünüyorum.




Önceki:Directory.GetCurrentDirectory ile Application.StartupPath arasındaki fark
Önümüzdeki:.Net Framework4 ile .Net Framework4.0 istemci profili arasındaki fark
Yayınlandı 10.07.2017 06:31:21 |
Paylaştığınız için teşekkürler
 Ev sahibi| Yayınlandı 23.07.2024 14:21:04 |
C# programları sadece bir örnekin doğru kodu çalıştırmasına izin verir
https://www.itsvse.com/thread-3391-1-1.html
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com