/(.*)<FooBar>/s
s вызывает Dot (.) для соответствия возврату каретки
В чтении статьи Shawn Wildermuth Потоки WPF: Создайте Больше Быстро реагирующих Приложений С Диспетчером .
я приехал через следующее, которое указывает, что можно использовать Второстепенного Рабочего точно так же, как Вы могли в WindowsForms. Предположите что:
BackgroundWorker Теперь, когда у Вас есть смысл того, как Диспетчер работает, Вы могли бы быть удивлены знать, что Вы не найдете использование для него в большинстве случаев. В Windows Forms 2.0 Microsoft представила класс для обработки потока неUI для упрощения модели разработки для разработчиков пользовательского интерфейса. Этот класс называют BackgroundWorker. Рисунок 7 показывает типичное использование класса BackgroundWorker.
рисунок 7 Используя BackgroundWorker в WPF
BackgroundWorker _backgroundWorker = new BackgroundWorker(); ... // Set up the Background Worker Events _backgroundWorker.DoWork += _backgroundWorker_DoWork; backgroundWorker.RunWorkerCompleted += _backgroundWorker_RunWorkerCompleted; // Run the Background Worker _backgroundWorker.RunWorkerAsync(5000); ... // Worker Method void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { // Do something } // Completed Method void _backgroundWorker_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled) { statusText.Text = "Cancelled"; } else if (e.Error != null) { statusText.Text = "Exception Thrown"; } else { statusText.Text = "Completed"; } }
компонент BackgroundWorker работает хорошо с WPF, потому что под покрытиями он использует класс AsyncOperationManager, который в свою очередь использует класс SynchronizationContext для контакта с синхронизацией. В Windows Forms, AsyncOperationManager руки прочь от класса WindowsFormsSynchronizationContext, который происходит из класса SynchronizationContext. Аналогично, в ASP.NET это работает с другой деривацией SynchronizationContext по имени AspNetSynchronizationContext. Эти SynchronizationContext-производные-классы знают, как обработать синхронизацию перекрестного потока вызова метода.
В WPF, эта модель расширяется с помощью класса DispatcherSynchronizationContext. При помощи BackgroundWorker Диспетчер нанимается автоматически для вызова вызовов метода перекрестного потока. Хорошие новости - то, что, так как Вы, вероятно, уже знакомы с этим общим шаблоном, можно продолжить использовать BackgroundWorker в новых проектах WPF.
Самый легкий способ заставить это работать состоит в том, чтобы добавить LoadSettingsGridData к очереди диспетчера. При установке DispatcherPriority операции достаточно достаточно низко операции расположения произойдут, и Вы будете хороши для движения.
StatusBarMessageText.Text = "Loading Configuration Settings...";
this.Dispatcher.BeginInvoke(new Action(LoadSettingsGridData), DispatcherPriority.Render);
this.Dispatcher.BeginInvoke(new Action(() => StatusBarMessageText.Text = "Done"), DispatcherPriority.Render);
Самый лучший и простой:
using(var d = Dispatcher.DisableProcessing())
{
/* your work... Use dispacher.begininvoke... */
}
Или
IDisposable d;
try
{
d = Dispatcher.DisableProcessing();
/* your work... Use dispacher.begininvoke... */
} finally {
d.Dispose();
}