Ho una discussione che chiama un oggetto che ottiene alcune informazioni da Internet. Quando questo oggetto è riempito con tutte le informazioni richieste, solleva un evento con un oggetto fornirà tutte le informazioni. L'evento viene consumato dal controller che ha avviato il thread.Thread WPF e GUI come accedere all'oggetto da thread diversi?
L'oggetto restituito dall'evento è aggiunto in una raccolta che è vincolata alla GUI tramite un approccio di modello di vista.
Il problema è che non posso usare CheckAccess con il binding ... come posso risolvere il problema dell'utilizzo di Object che è stato creato da un altro thread di quello principale?
L'errore che ricevo quando aggiungo l'oggetto alla raccolta del filo principale è:
Questo tipo di CollectionView non supporta le modifiche alla sua SourceCollection da un filo diversi dal thread dispatcher.
Questo il controllore:
public class WebPingerController
{
private IAllQueriesViewModel queriesViewModel;
private PingerConfiguration configuration;
private Pinger ping;
private Thread threadPing;
public WebPingerController(PingerConfiguration configuration, IAllQueriesViewModel queriesViewModel)
{
this.queriesViewModel = queriesViewModel;
this.configuration = configuration;
this.ping = new Pinger(configuration.UrlToPing);
this.ping.EventPingDone += new delPingerDone(ping_EventPingDone);
this.threadPing = new Thread(new ThreadStart(this.ThreadedStart));
}
void ping_EventPingDone(object sender, QueryStatisticInformation info)
{
queriesViewModel.AddQuery(info);//ERROR HAPPEN HERE
}
public void Start()
{
this.threadPing.Start();
}
public void Stop()
{
try
{
this.threadPing.Abort();
}
catch (Exception e)
{
}
}
private void ThreadedStart()
{
while (this.threadPing.IsAlive)
{
this.ping.Ping();
Thread.Sleep(this.configuration.TimeBetweenPing);
}
}
}
Puoi pubblicare la definizione di UIThread in questo contesto, per favore? Grazie. Non so cosa sostituirlo con il mio codice – Para
Stessa domanda. Che cosa significa esattamente UIThread? – zero51
Dovrebbe essere una sottoclasse di 'System.Windows.Threading.DispatcherObject'. – Jalal