2010-01-12 33 views
6

Bir algılayıcıya bağlanan, verileri toplayan ve BackgroundWorker iş parçacıklarını kullanarak arka planda işleyen bir GUI uygulamasına sahibim.'DisconnectedContext' kilitlenme nasıl hata ayıklanır ve çözülür?

ben başlamak için iyi çalışıyor gibi görünüyordu ProgressChanged kullanarak GUI veri post ediyorum haliyle. O zamandan beri veri oranlarını artırdım ve bir problem keşfettim; Yazılım birkaç dakika çalışacak şekilde bırakılırsa, işlemci kullanım miktarı makinemdeki her iki çekirdekte% 100'e ulaşana kadar yükselir ve şu noktada bir hata alırım:

Yönetilen Hata Ayıklama Asistanı 'DisconnectedContext', 'myapp.exe' dosyasında bir sorun algıladı. Ek Bilgi: Bağlam 0xe2ba0 bağlantısı kesildi. Arayüzleri mevcut içerikten serbest bırakma (context 0xe2d10). Bu, bozulmaya veya veri kaybına neden olabilir.

Web üzerinde, bir GUI uygulaması iletileri hızlı bir şekilde pompalayamazsa bunun gerçekleşebileceğini öneren bazı şeyler okudum. Pencereyi hızlı bir şekilde yeniden boyutlandırırsam (yani daha fazla mesaj pompalamak), düşündüğüm teoriyi destekleyen daha hızlı bir şekilde gerçekleşmesi için aynı çöküşü provoke edebileceğimi fark ettim.

Yani burada sorular şunlardır:

  1. kimse mesajı pompalama hakkında benim hipotezi ile hemfikir olsun?
  2. Başka bir açıklama var mı?
  3. Bunu kanıtlayabilmem için bir yol var mı (sıradaki mesajların sayısını görünüz)?
  4. Tüm bu yanlış kodlar bunun yanlış yöne gittiğimi gösteren kokular mı?

Herhangi bir tavsiye çok gratefully alınan.

cevap

3

çok özel bir sorun gibi sesler Bu tür ve ben henüz kimse cevap vardır nedeninin bu olduğunu düşünüyorum ama ben soru # 3 yardımcı olabilir düşünüyorum.

Spy++ pencerenizin gidiş iletileri görmek gerekir. Mesajları pompa GUI'nize izlemek ve yeniden boyutlandırma testini yapmak için kullanabilirsiniz. İşlenmeye çalışılan mesajlarda büyük bir artış gördüyseniz, hipotezinizi doğrulayabilir. Bir As

bir yana, bu MDA uzağa gitmesi için MTAThread için STAThread ana iş parçacığı daire değiştirmek mümkün olabileceğini okudum.

Perphaps bir dosyaya dışarı sensör okumaları tükürür veya sürekli GUI güncelleştirmek yerine farklı bir mekanizma içinde bunları sıraya uygulamanızda değişiklik olabilir. HTH.

+1

Sadece arada bir kilitlenme eklediği görünen MTATHread ayarını denedim. Ben bunun yerine bir queuenig mekanizması kabul etti ve bir "RichTextBoxControl" üzerinde dolduran ekran kodunun bir parçası bir hata. Bu ikisi arasında, sorunu çözdüğüm anlaşılıyor. Önerileriniz için teşekkürler. –

+0

Bunun bir kaç kez daha olduğunu gördüm ve veri üretici dizisinden dinleyicilere çok fazla "ProgressChanged" istek göndermeye çalışarak kesinlikle tetikleniyor. –

İlgili konular