Edit: Daha önce yazdıklarımı geri almam gerekiyor.
Yükledi myTextBox
adında bir metin kutusu ve Text
özelliğin değerini almak çalıştı: Aşağıdaki çalıştı
Thread t = new Thread(
o =>
{
Thread.Sleep(2000);
string value = myTextBox.Text;
Thread.Sleep(2000);
});
t.Start();
Ve uygulaması (WPF) 2 saniye sonra çöküyor gibi görünüyor. dağıtıcınızın kullanma çalışır:
Thread t = new Thread(
o =>
{
Thread.Sleep(2000);
myTextBox.Dispatcher.BeginInvoke(
(Action)(() => { string value = myTextBox.Text; }));
Thread.Sleep(2000);
});
t.Start();
Böylece, hala en azından WPF, GUI bileşenleri değerleri okurken memuru iplik geçmesi gerekir.
İkinci düzenleme: Bu daha iyi olur. Görünüşe göre klasik WinForms için deneyi tekrarlamak, özelliğini Invoke/BeginInvoke
kullanmadan okumak için çalıştığını ortaya koymaktadır. İlginçtir, aynı zamanda gayet iyi çalışıyor (invoke olmadan), iyi çalışıyor, ancak ben emin değilim iplik güvenli ve uygulama bazı sebeplerden şikayetçi değildir.
Alt çizgi: okur/yazma tek konuya seri hale getirilmiş ve böylece hiçbir iş parçacığı güvenliği var sağlıyor gibi, diğer iş parçacıkları GUI bileşenleri ile etkileşim halindeyken memuru kullanmak için herhangi bir durumda iyi bir fikirdir sorunlar.
Bu – jorne
@ CodeCaster yapmak için delegeleri kullanabilirsiniz Sadece denemek ve hangi işlerin genellikle iş parçacığı için güvenli kod almaz görüyorum. – hvd
@hvd: Ancak, _here_'de yazılan tüm soruları tatmin ediyor. –