Background Worker İle İlgili
-
normalde çalışan bi programım var . bunu backgroundworker içine aldıgımda
specified cast is not valid
hatası döndürüyor. kesin basit bişeyi gözden kaçırıyorum ama neyi :|
olay nedir burdaki ? -
up
-
veri tabanı ile ilgili bir işlem mi yapıyorsun acaba?
edit: kodları paylaşırsan hatanı görebilirz belki
-
şu anda kodlar yanımda değilde yaptıgım şu
programın kodlarını backgroundworkerın dowork eventına koyuyorum.
tetikleyici butonumun click indede baackgroundowrker runworkerasync ın çağırıyorum.
kodlar zaten düzgün olmasa backgroundworkerıda dahil etmeden öncede calısmaz ama program calısıo.
bu arada sadece background workerda değil threading sınıfını kullanarakta tanımlayıp yeni thread oluşturup içine atsam yine aynı hatayı döndürüyo :| -
hocam bu hatayı almanı sağlayan birkaç sebep olabilir.
o yüzden ya kodu görmek lazım yada kodu paylaşmak istemiyorsan try-catch kullanarak daha ayrıntılı bir hata verebilir misin? (özellikle IOexception filan denemelisin yada SQLexception kullanıyorsan tabi)
-
burda bişiler den bahsetmişler ama denedim olmadı
http://stackoverflow.com/questions/2491236/backgroundworker-and-webbrowser-control
kısaca multi threading ile webbrowser kontrolünü kullanamıyorum :| -
yeni konu açmadan yeni bir soru sormak istedim. backgroundworker nesnem var formda do workte 3-4 tane fonksiyonum var.
DoWorkEventArgs e gönderiyorum fonksiyonlara
1 tane butondan cancelasync işlemini başlatıyorum.
fonksiyonların içerisinde bacgroundworker cancelpendingle buton basılmışmı basılmamışmı yakalnıyorum.
break koyup e.cancel çekiyorum.
sorum şurda başta belirttigim gibi 3-4 tane fonksiyonum var bunların hepsinde bu olay başarılı şekilde calısırken 1 tanesinde
This BackgroundWorker is currently busy and cannot run multiple tasks concurrently
hatası alıyorum. hem cancelı gönderirken hem run ı gönderirken
bacgroundworkerın isbusy kontrolü yapıyorum buna rağmen işlemim calışmıyor
yardımcı olabilcek varmı :| -
backgroundowerker kullanmak zorunda mısın peki? normal thread kullansan olmaz mı?
edit:
-
Ercab bunu yazdı:
-----------------------------backgroundowerker kullanmak zorunda mısın peki? normal thread kullansan olmaz mı?
-----------------------------
açıkcası zorunda değilim fakat projeyi backgroundworker üstüne oturttum. oturmuş bi sistem var yani şimdi direk threada çevirsem boşuna kod ve zman sarfiyatı olucak. zaten backgroundworkerın arkaplandada thread calısıyor bir farklılık söz konusu olcagını sanmıyorum yine bana meşgul kapatamazsınız bişi dicegini tahmin ediyorum. -
FCN bunu yazdı:
-----------------------------Ercab bunu yazdı:
-----------------------------backgroundowerker kullanmak zorunda mısın peki? normal thread kullansan olmaz mı?
-----------------------------
açıkcası zorunda değilim fakat projeyi backgroundworker üstüne oturttum. oturmuş bi sistem var yani şimdi direk threada çevirsem boşuna kod ve zman sarfiyatı olucak. zaten backgroundworkerın arkaplandada thread calısıyor bir farklılık söz konusu olcagını sanmıyorum yine bana meşgul kapatamazsınız bişi dicegini tahmin ediyorum.
-----------------------------anladım hocam, öyleyse kodlarını bi gözden geçir sadece birinde çalışmıyorsa ufak bi yeri atlıyor olabilirsin, biraz ara ver tekrar dene olmadı uzun değilse sil baştan yaz
-
biliyorsun .nette win form controllerine farklı bir threadden erişmeye çalıştığın zaman Cross thread not zart zurt diye bir hata verir, sende muhtemelen buna çözüm oluşturmak için control sınıfının static bir değişkeni olan CrossThread ile başlayan (tam şeysini şu anda hatırlamıyorum) true değerine eşitlemişsindir, bu sadece farklı bir threadden erişim olduğunda uyarı çıkarmamasına neden olur, ama bunun gibi bir takım problemler devam eder,
bunun çözümü ise .net controlleriyle etkileşim içinde olduğun heryerde Control.Invoke(delegate) metodunu thread içinde kullanmanhttp://msdn.microsoft.com/en-us/library/ms171728.aspx burayıda bir incele istersen
