C# – Çapraz İş Parçacığı İşlemi Geçerli Değil Hatası ve Çözümü
C# ile projelerinizi kodlarken aşağıdaki gibi bir hatayla karşılaşırsanız eğer çözüm için bu makaleyi okumaya devam ediniz.
Öncelikle hatamızı neymiş görelim.
Sözel olarak,
An exception of type ‘System.InvalidOperationException’ occurred in System.Windows.Forms.dll but was not handled in user code
Additional information: Çapraz iş parçacığı işlemi geçerli değil: ‘lblAdetSayisi’ denetimine oluşturulduğu iş parçacığı dışında başka bir iş parçacığından erişildi.
Bu hatanın sebebi nedir?
Bu hatanın temel sebebi Thread çakışmaları olmasındandır.Genellikle ASenkron(MultiThread) yapısında olan programların geliştirme süreçlerinde alınan hatadır.
Bu hatanın çözümü oldukça basittir.Programınızın yüklenme aşamasına aşağıdaki kodu eklemeniz bu sorunu halledecektir.
Control.CheckForIllegalCrossThreadCalls = false;
Bu kod sayesinde Thread çakışmaları önemsenmeyecek ve somut hatalar ortadan kalkacaktır.
İyi çalışmalar…
Kolay gelsin Gencay bey. Yalnız neden bu şekilde yaptığımızı ve faydasını açıklayabilir misiniz? Neden bir action kullanıp bunu bir üst kontrolde Invoke etmedik te bu şekilde yaptık? Sizce bu doğru bir yaklaşım mı?
Merhaba Soner Bey,
Burada yapılanın ne nedeni nede fayda veyahut zararı olur.
Bu bir işlev yapan komuttur.Algoritma uygulamadığımız için yaklaşımı sorgulamak ne kadar lüzumlu bir uğraştır?
İsterseniz dediğiniz gibi yollar deneyebilirsiniz.
Teşekkürler Gençay, işimi gördü (:
İşini görmene sevindim Ekrem 🙂
Yine beklerim …
Teşekkür ederim.Bilginiz sayesinde sorun çözüldü.
Çok sağolasın InitializeComponent(); altına bu kodu eklediğimde prıl pırıl çalışmaya başladı program. Aslında ben bunu ekledim diye hiç kontrol etmedim 🙂 hataya çözmeye int daldığımda sayende hallettim sağol
Merheba Gencay bey. Bazı insanlar bu yöntemi hiç önermiyor bilgisayara zarar verebilir. Sizce ne kdar doğru?
Merhaba VB;
Bu yöntem aslen, yasal olmayan thread çağrılarının kontrol edilmemesini sağlayan bir propertyden ibarettir. Yani birnevi oluşan hataları gözardı etmekte diyebiliriz.
Aşağıdaki kod bloğunu incelerseniz eğer içeriğimizle alakalı hata alınacaktır.
Bu hatayı çözmek için kâh burada tarif edildiği gibi hatalar görmezden gelinebilir kâh aşağıdaki Invoke metoduyla hatalara mahal vermeksizin kontrollü bir şekilde işlev yerine getirilir.
Tabi ki de ikinci yöntem daha sağlıklı ve güvenilirdir. Lakin içerikte vurgulanan yöntem, basit ve etkinliği çokta geniş olmayan projeler için oldukça ideal ve pratik olduğunu bilmenizi isterim ve bu şartlarda(basit, küçük/dar kapsamlı vs. projelerde) ne bilgisayarınıza ne de projenize zarar verebileceği için kesinlikle tavsiye ederim.
Sevgilerimle…
Tesekkur ederim Gencay bey cok iyi anlatim yaptiniz. Simdi soyle anladim ki ne projesi olursa olsun bilgisayara zarar vermez ?
Programlamada bilgisayara zarar verebileceğiniz en makul noktalardan biri Pointerlardır. Bu alanda bile bilinmeyen bellek adreslerine müdahale ettiğimiz vakit otomatik işletim sisteminin güvenliği tarafından engellenmekteyiz. Bunuda aşabilmeniz için oldukça zahmet göstermeniz gerekmektedir. Eee haliyle “küçük” çaplı projelerde zarar vermeyeceğinizin garantisini verebilirim. Nihayetinde var olan bazı hataları görmezden gelmekte nihai olmasada anlık olarak çözümdür ve bu çözüm küçük çaplı projelerde yeterli olacaktır.
Sevgiler…
tesekkurler hocam 🙂
Teşekkürler benim de işime yaradı bu yöntem
Saol işime yaradı.
Teşekkürler
😉
Allah razı olsun
Teşşekürler 🙂 İşimizi Gördü.
System.InvalidOperationException: ‘Çapraz iş parçacığı işlemi geçerli değil: ” denetimine oluşturulduğu iş parçacığı dışında başka bir iş parçacığından erişildi.’
hatası alıyorum halen değişen bişey olmadı
Şu yorumdaki tekniği denemenizi tavsiye ediyorum. Geri bildiriminizi bekliyorum.
Selam Gençay Bey. Mükemmel kanalınızda mükemmel bilgilendirmelerinizi okudum ve işime yaradı mı onu bilmiyorum. Kendinize iyi bakın.
Teşekkür ederim. Emeğinize sağlık
Teşekkür ederim hocam.
Merhaba, yardımcı olduğunuz için teşekkür ederim. İşime yaradı. Umarım bahsettiğiniz 2. yöntem ile de çözüme ulaşabilirim.