2016-03-27 6 views
0

Ich habe ein Problem mit meinem benutzerdefinierten Ereignis, das ein Textfeld in meiner UWP-Anwendung nicht aktualisiert. Wenn ich den Textbox1.Text mit debug.Writeline ersetze, funktioniert es. Gibt es einen Grund, warum ich eine Textbox nicht mit einem Event aktualisieren kann? Wenn ich das Progress-Objekt verwende, funktioniert es. Ich versuche nur herauszufinden, warum es nicht mit meiner eigenen benutzerdefinierten Veranstaltung funktionieren würde. DankeC# Benutzerdefiniertes Ereignis in Klasse wird nicht aktualisiert Textfeld

public sealed partial class MainPage : Page 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    private void button_click(object sender, RoutedEventArgs e) 
    { 
     recData myRecDataobject = new recData(); 
     myRecDataobject.dataRecvEvent +=() => 
     { 
      textBox2.Text = "Event Occured"; // This throws an error 
      Debug.WriteLine("test2"); 
     }; 

     Progress<int> progress = new Progress<int>(); 
     myRecDataobject.getDataMethodAsync(progress); 
     progress.ProgressChanged += (o, result) => 
     { 
      textBox1.Text = result.ToString(); 

     }; 

    } 

} 

public class recData 
{ 
    public delegate void myEvenetHandlerDelegate(); 
    public event myEvenetHandlerDelegate dataRecvEvent; 


    private int _myValue; 
    public int myValue 
    { 
     get 
     { 
      return _myValue; 
     } 
     set 
     { 
      _myValue = value; 
     } 
    } 

    public async void getDataMethodAsync(Progress<int> progress) 
    { 
     await getDataMethod(progress); 
    } 

    private Task getDataMethod(IProgress<int> progress) 
    { 
     return Task.Factory.StartNew(() => 
     { 
      for (int i = 0; i < 1000; i++) 
      { 
       Task.Delay(2000).Wait(); 
       if (dataRecvEvent != null) 
       { 
        dataRecvEvent(); 
        progress.Report(i); 
       } 

      } 

     }); 
    } 


} 
+0

Welcher Fehler wird ausgegeben? – m1o2

Antwort

1

Sie versuchen, eine XAML-Eigenschaft aus einem Hintergrundthread zu aktualisieren. Dies funktioniert nicht (Ihr Fehler sollte "Zugriff verweigert" sein).

Verwenden Sie Dispatcher.BeginInvoke, um die Aktualisierung der TextBox-Eigenschaft im UI-Thread zu planen.

+0

Danke, sorry, ich bin gerade zurückgekommen. – user3363744

+0

Warum funktioniert Fortschritt, aber nicht das Ereignis? – user3363744

+0

Weil es [dokumentiert] (https://msdn.microsoft.com/en-us/library/hh193692 (v = vs.110) .aspx) ist, Ereignisse auf dem erfassten SynchronizationContext auszulösen. –

Verwandte Themen