У меня есть текстовое поле в окне, которое сообщает о статусе и/или успехе действия. Он привязан к свойству ViewModel.
Поэтому, когда пользователь активирует действие, которое может занять некоторое время, я не хочу сообщать ему, что действие началось в текстовом поле. Проблема в том, что он не пишет в текстовое поле, пока действие не завершится.
Я предполагаю, что это потому, что поток не дает пользовательскому интерфейсу возможности выполнять свою работу, но не уверен.
public class ViewModel : INotifyPropertyChanged
{
private string _report;
public string Report
{
get { return _report; }
set
{
_report = value;
RaisePropertyChanged("Report");
}
}
public void DoHeavyAction()
{
Report += "Heavy action readying";
ReadyHeavyAction();
Report += "Heavy action starting";
var result = DoTheHeavyAction();
if(!result.success)
{
report += "Heavy action failed";
return;
}
Report += result.value;
}
}
В этом случае программа лагает на 2 секунды, а затем появляется все это:
Heavy action readying
Heavy action starting
Heavy action failed
Вместо того, чтобы появляться один за другим.
Могу ли я как-то использовать диспетчер для обновления представления (обратите внимание, я использую MVVM).