У меня есть текстовое поле в окне, которое сообщает о состоянии и / или успешном действии. Он привязан к свойству в ViewModel.
Поэтому, когда пользователь активирует действие, которое может занять некоторое время, я не хочу сообщать ему, что действие началось в textBox. Проблема в том, что он не пишет в текстовое поле до тех пор, пока действие не будет завершено.
Полагаю, это связано с тем, что поток не дает интерфейсу возможности выполнить свою работу, но не уверен.
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).