У меня проблема. Я хочу обновить основной пользовательский интерфейс в пользовательском элементе управления. Я пробовал столько раз, но не смог. Тест делится на две категории следующим образом:
Класс 1:
Сначала я назначил элемент управления главного окна (tbInfo, тип TextBlock) напрямую, безуспешно. Поэтому я создал класс textBlockUpdate (реализующий интерфейс уведомления об изменении свойства) и связал его свойства (TextMessage) со свойством Text в tbInfo , безуспешно. Затем я использовал элемент управления контентом, также безуспешно. Код выглядит следующим образом:
//Feature code in user control.
info = string.Format("Adding file{0}", System.IO.Path.GetFileName(FileName));
if (_dataObject.MainWindow != null)
{
_dataObject.MainWindow.ShowInfo(info);
}
//Feature code in main window.
public void ShowInfo(string info)
{
if (Dispatcher.CheckAccess())
{
//tbInfo.Text = info;
// textBlockUpdate.TextMessage = info;
TextBlock textBlock = new TextBlock();
textBlock.Text = info;
tbInfoContainer.Content = textBlock;
}
else
{
Action<string> showInfoDel = (str) =>
{
// tbInfo.Text = info;
//textBlockUpdate.TextMessage = info;
TextBlock textBlock = new TextBlock();
textBlock.Text = info;
tbInfoContainer.Content = textBlock;
};
Dispatcher.BeginInvoke(showInfoDel, info);
}
}
Класс 2: Я поместил код в пользовательском элементе управления в поток, или это не удалось. Я попытался три раза, но мне это никогда не удавалось.
1.
new Thread(()=>{
this.Dispatcher.Invoke(new Action(()=>{
//Add the feature code above here
}));
}).Start();
2.
Application.Current.Dispatcher.Invoke(new Action(() => {
//Add the feature code above here
}));
3.
Task task = new Task(()=> {
//Add the feature code above here
});
task.Start();
task.Wait();
Итак, кто-нибудь может сказать мне Как сделать, чтобы это работало?