Я конвертирую простое приложение WinForm в WPF с использованием шаблона MVVM. Моя пристрастная реализация кода модели представлений приведена ниже. Я застрял в showPath(string path)
и addFile(string file)
, потому что они используют управление WPF. Как я могу преодолеть эту проблему?Преобразование приложения WinForm в WPF ViewModel
class DirectorySearchModel
{
/*-- invoke on UI thread --------------------------------*/
void showPath(string path)
{
//textBlock1.Text = path;
//return path;
}
/*-- invoke on UI thread --------------------------------*/
void addFile(string file)
{
//listBox1.Items.Add(file);
}
/*-- recursive search for files matching pattern --------*/
void Search(string path, string pattern)
{
/* called on asynch delegate's thread */
if (System.Windows.Application.Current.Dispatcher.CheckAccess())
showPath(path);
else
System.Windows.Application.Current.Dispatcher.Invoke(
new Action<string>(showPath), DispatcherPriority.Background, new string[] { path }
);
string[] files = Directory.GetFiles(path, pattern);
foreach (string file in files)
{
if (System.Windows.Application.Current.Dispatcher.CheckAccess())
addFile(file);
else
System.Windows.Application.Current.Dispatcher.Invoke(new Action<string>(addFile), DispatcherPriority.Background,
new string[] { file }
);
}
string[] dirs = System.IO.Directory.GetDirectories(path);
foreach (string dir in dirs)
Search(dir, pattern);
}
}
Я внес изменения в соответствии с вашим предложением, но я получаю сообщение об ошибке в этой строке System.Windows.Application.Current.Dispatcher.Invoke ( нового действия (ShowPath), DispatcherPriority.Background, новая строка [] {путь} –
Я бы написал его как: 'Application.Current.Dispatcher.Invoke (новое действие (() => this.addFile (файл)), DispatcherPriority.Background);' –
получил это Спасибо :) –