Programın arka planda çalışması nasıl engellenir?

ahmetrevankula

Yoctopat
Katılım
8 Ağustos 2024
Mesajlar
3
Daha fazla  
Cinsiyet
Erkek
Visual Studio winform kullanmak suretiyle hazırladığım programa eklemeler yaptım.

Önceki halini de ayrıca saklıyorum.

Önceki hali F5 ile başlattığımda ön izleme yapabiliyorum.

Ancak, yeni halini F5 yaptığımda ne yazık ki program ön izleme moduna gelmiyor.

Bin ve obj klasörlerinde oluşan EXE dosyasını açmaya çalıştığımda ise arka planda çalışması nedeniyle hata alıyorum.

Görev Yöneticisi'nden açılmış görünen programı kapatmama rağmen ne yazık ki yüklemeyi yapamıyorum.

Ekranda herhangi bir hata da çıkmıyor.

Sadece formlardan bir tanesinin designer kısmında yer alan bölümde.

This. Resumelayout(false);

Hata veriyor.

Sorunum nedir, nasıl çözebilirim? Orta halli ama ayrıntıları bilmeyen bir amatörüm.

Saygılarımla...
 
Visual Studio winform kullanmak suretiyle hazırladığım programa eklemeler yaptım.

Önceki halini de ayrıca saklıyorum.

Önceki hali F5 ile başlattığımda ön izleme yapabiliyorum.

Ancak, yeni halini F5 yaptığımda ne yazık ki program ön izleme moduna gelmiyor.

Bin ve obj klasörlerinde oluşan EXE dosyasını açmaya çalıştığımda ise arka planda çalışması nedeniyle hata alıyorum.

Görev Yöneticisi'nden açılmış görünen programı kapatmama rağmen ne yazık ki yüklemeyi yapamıyorum.

Ekranda herhangi bir hata da çıkmıyor.

Sadece formlardan bir tanesinin designer kısmında yer alan bölümde.

This. Resumelayout(false);

Hata veriyor.

Sorunum nedir, nasıl çözebilirim? Orta halli ama ayrıntıları bilmeyen bir amatörüm.

Saygılarımla...
Geç döndüğüm için kusura bakmayın. Anca gözüme çarptınız. C# ile ilgili konularda destek için beni etiketlerseniz sizlere daha hızlı dönebilirim.
C#:
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
private const int SW_RESTORE = 9;
[STAThread]
private static void Main()
{
    System.Threading.Thread.Sleep(999);
    foreach (var process in Process.GetProcesses())
    {
        try
        {
            if (process.ProcessName.Contains("Form1"))
            {
                IntPtr mainWindowHandle = process.MainWindowHandle;
                if (mainWindowHandle != IntPtr.Zero || FindWindow(null, "Form1") != IntPtr.Zero)
                {
                    SwitchToThisWindow(mainWindowHandle, true);
                    ShowWindow(mainWindowHandle, SW_RESTORE);
                    Application.Exit();
                    return;
                }
            }
        }
        catch { }
    }
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}
Bu koddaki, 'Form1' yazan yerleri kendi uygulamanızın adını belirtirseniz uygulama çalıştığında sadece 1 kere çalışacaktır. Eğer uygulamanız çalışıyorken 1 tane daha açmak isterseniz engelleyip, (eğer formunuz Hide() değilse) formunuzu ön plana alıp kendini çalıştırmadan kapanacaktır.

NOT: Eğer uygulama çok hızlı şekilde çalıştırırsa 2 form açılabilir.
Ben size örnek kod verdim sizde çok hızlı açmaya çalışanların bile önüne geçebilirsiniz.
 

Technopat Haberler

Yeni konular

Geri
Yukarı