ben WPFs Dispatcher.Invoke ve Dispatcher.BeginInvoke kullanım ile ilgili bazı açıklamalar gerekir düşünüyorum.WPF Dispatcher.BeginInvoke ve UI/Arkaplan Konuları
varsayalım Ben öyle ki basit bir WPF uygulamasında bir düğmeye basarak üzerinde çağrıldığında gibi bazı uzun çalışan 'iş' kod:
Bu kod benim kullanıcı arayüzü kilitleniyor
longWorkTextBox.Text = "Ready For Work!";
Action workAction = delegate
{
Console.WriteLine("Starting Work Action");
int i = int.MaxValue;
while (i > 0)
i--;
Console.WriteLine("Ending Work Action");
longWorkTextBox.Text = "Work Complete";
};
longWorkTextBox.Dispatcher.BeginInvoke(DispatcherPriority.Background, workAction);
workAction ederken gerçekleştiriliyor. Bunun nedeni, Dispatcher'ın her zaman UI iş parçacığı üzerinde çalışmasını sağlamasıdır, doğru mu?
bu varsayarsak, benim arayüzünden ayrı bir konu workAction yürütmek için benim dağıtıcınızın yapılandırmak için en iyi yöntem nedir? backgroundworker kullanarak yanında bunu yapmanın bir daha zarif yolu var mı
longWorkTextBox.Text = "Ready For Work!";
Action workAction = delegate
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate
{
Console.WriteLine("Starting Slow Work");
int i = int.MaxValue;
while (i > 0)
i--;
Console.WriteLine("Ending Work Action");
};
worker.RunWorkerCompleted += delegate
{
longWorkTextBox.Text = "Work Complete";
};
worker.RunWorkerAsync();
};
longWorkTextBox.Dispatcher.BeginInvoke(DispatcherPriority.Background, workAction);
: ben gibi kilitlenmesini benim UI engellemek için benim workAction bir BackgroundWorker ekleyebilir biliyor musunuz? Ben her zaman BackgroundWorker ilginç olduğunu duydum, bu yüzden bazı alternatifleri bilmek merak ediyorum.
Yep daha fazla şeyler yapmak, Arkaplan işçilere daha kullanımı daha kolaydır. Bir arka plan iş parçacığında bir şey yapmak istersiniz, ancak işiniz bittiğinde UI iş parçacığını etkiler, BackgroundWorker kullanmak için en kolay şeydir. –
2013'te daha basit bir yol var - async/await: http://stackoverflow.com/questions/12654968/is-async-and-await-exclusively-for-gui-based-asynchronous-programming – Cosmin
Async'i çok seviyorum, ama her şeyle iyi çalışmıyor. Ama bu oldukça iyi bir seçenek! – Malavos