Я нашел хороший фрагмент кода Find Name, который я использую в решении WPF:
public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
string controlName = child.GetValue(Control.NameProperty) as string;
if (controlName == name)
{
return child as T;
}
else
{
T result = FindVisualChildByName<T>(child, name);
if (result != null)
return result;
}
}
return null;
}
Но это работает, только если я в потоке пользовательского интерфейса.
У меня естьдругой поток, который воспроизводит аудиофайл с синхронизацией конца.Я хочу использовать приведенный выше код для установки свойства dep в потоке пользовательского интерфейса, но постоянно получаю ошибку в нескольких потоках.
Даже попробуйте простое:
SoundFXPad selectedSoundFXPad = (SoundFXPad)m_parent.FindName("panelC" + numbervar);
Дает мнета же ошибка
Все остальные поточно-ориентированные коды диспетчера-вызовов WPF, которые я видел, предполагают, что вы уже знаете имя элемента управления.Есть ли способ использовать любой из приведенных выше кодов в поточно-ориентированном виде, чтобы повлиять на элемент управления пользовательского интерфейса из другого потока, в котором нужно «найти» имя?
Спасибо!