Se in una finestra WPF voglio che un controllo sia aggiornato da un altro thread come devo fare?
Ho provato così: Dovrebbe essere che il testo del textblock si aggiorna ogni decimo di secondo aggiungendo un nuovo carattere, invece lo vedo solo quando il testo è completo, come se il thread secondario bloccasse il thread principale.
public MainControl()
{
InitializeComponent();
ThreadStart start = delegate()
{
// ...
DispatcherOperation op = Dispatcher.BeginInvoke(
DispatcherPriority.Send,
new Action(SetMainText));
DispatcherOperationStatus status = op.Status;
while (status != DispatcherOperationStatus.Completed)
{
status = op.Wait(TimeSpan.FromMilliseconds(100));
if (status == DispatcherOperationStatus.Aborted)
{
;
}
}
};
Thread t = new Thread(start);
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
private void SetMainText()
{
string MainText = "Trasmissione dati integrata";
//txtMain.Text = MainText;
txtMain.Text = string.Empty;
foreach (char c in MainText)
{
txtMain.Text += c;
System.Threading.Thread.Sleep(100);
}
}