Merhaba arkadaşlar,

Formun açılışında, * Ön değerlerin yüklenmesi, * DLL'lerin Embed edilmesi, * İnternetin kontrolü işlemler uzun sürebilmektedir. Bu sebepten dolayı

Splash Screen mantığında bir Thread ile tetiklenen bir form üzerinde mesajı göndermekteyim. Thread oluşturup Start ile Formun içerisine parametre gönderiyorum. İşlem bittiğinde de THREAD.Abort(); diyerek Threadi sonlandırıyorum...

Sıkıntının başladığı nokta; Thread abort oldugu durumda herzaman olmamakla beraber 10 starttan 4ünde Tamamen Proje kapanıyor.

           Thread IslemThread = new Thread(new ParameterizedThreadStart(AnaForm.Bekleyiniz)) { IsBackground = true };
            IslemThread.Start("Program hazır duruma getiriliyor.");

            try
            {
                if (AnaForm.AnaDegiskenler.DllYukle) 
                {
                    const string DizinAdi = @"OrkaSQLDemoInstall_DevExp.DLLs.";
                    DLL(DizinAdi, "Ionic.Zip.dll");
                    DLL(DizinAdi, "DevExpress.XtraEditors.v14.2.dll");
                    DLL(DizinAdi, "DevExpress.XtraGrid.v14.2.dll");
                    DLL(DizinAdi, "DevExpress.XtraLayout.v14.2.dll");
                    DLL(DizinAdi, "DevExpress.Data.v14.2.dll");
                    DLL(DizinAdi, "DevExpress.BonusSkins.v14.2.dll");
//                    DLL(DizinAdi, "DevExpress.Printing.v14.2.Core.dll");
//                    DLL(DizinAdi, "DevExpress.RichEdit.v14.2.Core.dll");
//                    DLL(DizinAdi, "DevExpress.Sparkline.v14.2.Core.dll");
                    DLL(DizinAdi, "DevExpress.Utils.v14.2.dll");
                    DLL(DizinAdi, "DevExpress.XtraBars.v14.2.dll");
 //                   DLL(DizinAdi, "DevExpress.XtraPrinting.v14.2.dll");
 //                   DLL(DizinAdi, "DevExpress.XtraTreeList.v14.2.dll");
                    DLL(DizinAdi, "DevExpress.XtraVerticalGrid.v14.2.dll");
                    DLL(DizinAdi, "System.Net.FtpClient.dll");
                    DLL(DizinAdi, "MySql.Data.dll");
                }

                Application.EnableVisualStyles();
                AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

                Application.SetCompatibleTextRenderingDefault(false);
                IslemThread.Abort();

   public static void Bekleyiniz(object Baslik)
    {
        try
        {
            using (frmBekleyin Bekle = new frmBekleyin())
            {
                Bekle.Text = (string)Baslik;
                Bekle.ShowDialog();
            }
        }
        catch (Exception) { }
    }

soruldu: 30 Tem '15, 09:10

r3boot's gravatar image

r3boot
20661017
cevap kabul oranı: 50%

değiştirildi: 30 Tem '15, 09:11

Yanlış anlamadıysam bu bahsettiğiniz DLL ler projenizin çalışması için gerekli. Thread bittiğinde DLL ler henüz yüklenmemiş olduğu için proje açılmıyor olabilir. Program.cs içindeki Main metodunda Application.ThreadException += Application_ThreadException; şeklinde register işlemi yapıp exception yakalamaya çalışabilirsiniz. thread içinde de try-catch bloğu kullanıp hatayı bulmaya çalışabilirsiniz.

(31 Tem '15, 03:01) huseying huseying's gravatar image

Teşekkürler yanıtın için fakat bunu denememe rağmen hatta ThreadAbortException kullanmama rağmen bir Exception oluşturmadan Program kapanıyor.

Aslında DLL'leri yüklemek için çalıştırmam örnek buna.

DLL'ler yüklenip Programın içerisine giriş yaptıktan sonra; InternetKontrol ederken, SQLLogin denemesi yaparken SplashScreen ekranını getiriyorum. Fakat Abort ettiğimde Threadi program tabiri caize intihar ediyor

Örnek bir kod;

public void SQLListesiniCikar()
        {
            try
            {
                Thread IslemThread = new Thread(new ParameterizedThreadStart(Bekleyiniz));
                IslemThread.IsBackground = true;
                IslemThread.Start("Kurulu SQL Serverların Listesi Hazırlanıyor...");
                FrmListSQL Frm = new FrmListSQL();

Frm.Show();
                IslemThread.Abort();

}
            catch (ThreadAbortException e)
            {
                MessageBox.Show(e.Message);
            }
        }
(31 Tem '15, 16:27) r3boot r3boot's gravatar image

Formu kapatmak için Thread'ı abort etmek yerine formun close methodunu kullanırsanız muhtemelen hata almıycaksınız.

(31 Tem '15, 17:59) ArnesTwin ArnesTwin's gravatar image

Yanıtınız için teşekkürler fakat SplashFormu Thread ile oluşturup işi bitince kapatılmasını sağlıyor.

        FrmListSQL Frm = new FrmListSQL();
Load kısmı tamamlanana kadar bekletip, Sonra yok etmek için Abort

ediyorum.

           Thread IslemThread = new Thread(new ParameterizedThreadStart(Bekleyiniz));
           Yani burada Bekleyiniz prosedürü ile SplashFormu

çalıştırılmakta ve FormLoad işlemi bittiğinde SplashFormu kapatılmaktadır. Sizin dediğiniz mantıkta; Açılan frmListSQL formunu kapatıyorum. Buda Load kısmı bittiğinde Kullanıcının önüne gelicek olan Gridi göstermek Formu kapatmak anlamına gelir.

(02 Ağu '15, 14:16) r3boot r3boot's gravatar image
1

Bence bi deneyin, bana splash screeni kapatmak için threadı abort etmek çok yalnış geliyor, her neyse sadece bi öneri problem belki de başka bir şeydir.

(02 Ağu '15, 14:20) ArnesTwin ArnesTwin's gravatar image

SplashForma özel bir class geliştirip, Prosedürlerin o class üzerinde çalışmasının sağlanması ve işinin bittiğinde Free edilmesiyle bir çözüm üretebildim.

Yorumlarınız için teşkler.

permanent link

cevaplandı: 04 Ağu '15, 04:17

r3boot's gravatar image

r3boot
20661017
cevap kabul oranı: 50%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×42
×31

Soruldu: 30 Tem '15, 09:10

Görüntüleme: 664 kez

Son güncelleme: 04 Ağu '15, 04:17

powered by BitNami OSQA