Только поток пользовательского интерфейса может получить доступ к элементам пользовательского интерфейса, что, как я догадываюсь, и есть эти txt
вещи. Parallel.Invoke
в вашем случае не является потоком пользовательского интерфейса, поэтому возникает исключение при попытке доступа к свойству .Text
в элементах управления.
Вам необходимо перенаправить вызов в поток пользовательского интерфейса. В WinForms элементы управления могут помочь вам сделать это:
if (myControl.InvokeRequired)
{
myControl.Invoke(...);
}
else
{
myControl.Text = "something";
}
MSDN имеет статью с примерами здесь (VS2010):
http://msdn.microsoft.com/en-us/library/757y83z4(v=VS.100).aspx
Обновление 1:
Для WPF модель аналогична, но включает Диспетчер:
myControl.Dispatcher.Invoke(...);
Обновление 2: Конечно, похоже, вам даже не нужно использовать многопоточный код здесь. Я полагаю, что использование многопоточной части больше, чем код, который вы в конечном итоге вызываете. Просто удалите использование нескольких потоков из этого раздела и установите свойства напрямую:
public SettingApp()
{
InitializeComponent();
SetDataInTextBox();
}
private void SetDataInTextBox()
{
txtIncAns.Text = Properties.Settings.Default.IncludeAN;
txtIncAuthor.Text = Properties.Settings.Default.IncludeAutt;
txtIncQuo.Text = Properties.Settings.Default.IncludeQU;
txtIncSpBegin.Text = Properties.Settings.Default.IncludeSP;
}