2010-10-25 16 views
8

Parametrelerle nasıl kontrol yapabilirim? Bunu ben hazırladım, ama hiçbir yer bulamadım!WPF bir kontrol çağırma

Ek bilgiler:: Parametre sayımı eşleşmiyor

invoke ui thread

Bu

i almak hatadır.

Ve bu, bir metin kutusu denetiminin text özelliğinin boş olup olmadığını basit bir kontrol yaptığımda gerçekleşir. Bu, WinForms:

Bu satır, catch bloğuna satırdan atlar ve bana iletiyi gösterir.

// temsilci:

Bu şimdiye kontrolünü çağırmak deneyin nasıl özel temsilci geçersiz TBXTextChanger (string metin);

private void WriteToTextBox(string text) 
    { 
     if (this.textboxlink.Dispatcher.CheckAccess()) 
     { 
      this.textboxlink.Text = text; 
     } 

     else 
     { 
      this.textboxlink.Dispatcher.Invoke(
       System.Windows.Threading.DispatcherPriority.Normal, 
       new TBXTextChanger(this.WriteToTextBox)); 
     } 
    } 

Neyi yanlış yapıyorum? Ve ne zamandan beri sadece içeriğini okumak istediğimde bir kontrol çağırmak zorundayım?

cevap

15

Invoke öğesini çağırdığınızda, bağımsız değişkeninizi belirtmiyorsunuz (text). Dispatcher, yönteminizi çalıştırmayı denediğinde, sağlanacak bir parametresi yoktur ve bir istisna alırsınız.

Dene:

this.textboxlink.Dispatcher.Invoke(
    System.Windows.Threading.DispatcherPriority.Normal, 
    new TBXTextChanger(this.WriteToTextBox), text); 

Bir metin kutusundan değerini okumak istiyorsanız, seçeneklerden biri bir lambda kullanmaktır:

string textBoxValue = string.Empty; 

this.textboxlink.Dispatcher.Invoke(DispatcherPriority.Normal, 
    new Action(() => { textBoxValue = this.textboxlink.Text; })); 

if (textBoxValue == string.Empty) 
    Thread.Sleep(5000); 
+0

Tamam, düzeltdim, bu benim ilk sorum oldu. Ama bir metin kutusunun içeriğini nasıl okurum? – Yustme

+0

Tipik olarak, iş parçasını ayrı iş parçacığında çağırmadan önce onu okudunuz ... –

+0

Ama sürekli okumak zorundayım. Sadece ondan önce değil. Çalışan iş parçacığı, program kapandığında durduran sonsuz bir iş parçacığıdır. Bu uygulama, WFF – Yustme

0

Reed doğru ama nedeni Bunu yapmanız gerekir GUI öğeleri iş parçacığı güvenli değildir ve bu nedenle GUI iş parçacığının tüm içeriği doğru okunduğundan emin olmak için GUI iş parçacığı üzerinde yapılması gerekir. Bunun neden böyle bir okuma işlemiyle gerekli olduğu daha az açıksa, ancak yazımlarla çok gerekli ve bu nedenle .NET çerçevesi GUI iş parçacığına yapılacak tüm GUI'lere erişimi gerektiriyor.