Я новичок в WPF, и я заметил, что вы не можете получить доступ непосредственно из другого потока в элементы управления WPF. Вместо этого вы должны использовать диспетчер. Я прочитал несколько статей и вопросов из stackoverflow и до сих пор не знаю, почему следующий код не работает.WPF многопоточность: исключение диспетчера
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
System.Threading.Thread thread = new System.Threading.Thread(
new System.Threading.ThreadStart(
delegate()
{
TransformGroup transform = new TransformGroup();
RotateTransform rot = new RotateTransform(45);
TranslateTransform trans = new TranslateTransform(500, 500);
transform.Children.Add(rot);
transform.Children.Add(trans);
bOne.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
bOne.RenderTransform = transform;
}
));
}
));
thread.Start();
}
}
где XAML является:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Custom="http://schemas.microsoft.com/surface/2008" x:Class="Prueba.MainWindow"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Custom:SurfaceButton Name="bOne" Content="SurfaceButton" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top"/>
</Grid>
</Window>
Тем не менее бросать исключение при попытке изменить bOne.RenderTransform.