2011-05-30 16 views
5

Ana iş parçacığımda (WPF uygulaması) bir ListBox nesnesi var. Neden BackgroundWorker iş parçacığına erişemiyorum. Bildiğim kadarıyla, her bir iş parçacığı için yığın ayrıdır, ancak yığın ortaktır. ListBox nesnesi yığın halinde oluşturulmadı. Bu durumda neden erişilebilir değil. ListBox başvurusunu parametre olarak geçmeye çalıştım ve BackgroundWorker'daki içeriğine erişmeye çalıştım. C++ 'dan farklı nesneler arasında nesne paylaşımı kavramı mı?Bir BackgroundWorker ile ana iş parçacığı arasında nesne paylaşımı

+0

Bazı kod snippet'lerini gösterebilir misiniz? – crypted

+1

Başka herhangi bir nesne olarak iletebilirsiniz, ancak değiştirdiğinizde, threading modeli "STA" olduğundan bir istisna kaldırılacaktır. "Stackoverflow" üzerindeki farklı konulardan güvenli bir şekilde nasıl değiştirileceğini bulabilirsiniz. – Xaqron

cevap

10

WinForms gibi, WPF'nin tasarımı, tüm kullanıcı arabirim öğelerine yalnızca bunları oluşturan parçacıklardan erişilmesi gereği ile büyük ölçüde basitleştirilmiştir.

Çok iş parçacıklı bir program yazmaya çalıştığınızda, bu "özellik" büyük bir sınırlama gibi görünebilir. Bir kullanıcı arayüzü elemanının en basit özelliklerinin bir arka plan iş parçacığından doğrudan değiştirilmesi bile imkansızdır. Eğer öyleyse, arka plan iş parçacıklarını WPF ile nasıl kullanabiliriz?

Yanıt, kullanıcı arabirimine yönelik eylemlerimizi, işin çakışma olmadan gerçekleştirilebileceği ön plan iş parçacığı üzerine dönüştürmemiz gerektiğidir. Daha sıkı konuşmak gerekirse, eylemlerimizi değiştirmeye çalıştığımız unsuru oluşturan iş parçacığı bağlamında yürütmeliyiz.

WPF diş çekme konu büyük bir tanesidir ama burada mükemmel bir giriş düzeyinde bir makale: Bu makaleyi okursanız

başarmak Dispatcher nasıl kullanılacağını görmek için sizin threading modelini ihlal etmeden yapılan eylemler.

İlgili konular