Я пытаюсь создать параллельное выполнение функции в wpf C#, которая также запускает действия в пользовательском интерфейсе. Но при запуске всегда существует исключение в методах в элементах управления UI: вызывающий поток не может получить доступ к этому объекту, потому что ему принадлежит другой поток. Исключение всегда вызывается во втором экземпляре цикла, который запущен, поэтому невозможно управлять UI в двух параллельных исполняемых экземплярах?Параллельное программирование: не удается получить доступ к параллельному интерфейсу?
Можно ли подключить интерфейс параллельно?
Код:
do
{
if (listBox_Copy.SelectedIndex < listBox_Copy.Items.Count - 1)
{
listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex + 1;
listBox_Copy.ScrollIntoView(listBox_Copy.SelectedItem);
} listBox_Copy.Focus();
huidigitem = listBox_Copy.SelectedItem as ListBoxItem;
currentitemindex = listBox_Copy.SelectedIndex;
currentitem = listBox_Copy.ItemContainerGenerator.ContainerFromIndex(currentitemindex) as ListBoxItem;
itemgrid = FindVisualChild<Grid>(currentitem);
senderbutton = (Button)sender;
Button playcues = itemgrid.FindName("Playbutton") as Button;
cuetrigger = itemgrid.FindName("cuetrigger") as TextBlock;
Jobs.Add(playcues);
} while (cuetrigger.Text != "go");
Parallel.ForEach(Jobs, playcues => { play(playcues, new RoutedEventArgs()); });
}
И тогда он выходит из строя на функцию воспроизведения
private void play(object sender, System.Windows.RoutedEventArgs e)
{ Grid itemgrid = VisualTreeHelperExtensions.FindAncestor<Grid>(playcue);