Можно ли изменить поле _dispatcher в DispatcherObject путем отражения, чтобы изменить свойства объекта DispatcherObject в потоках?
Я новичок в разработке wpf. Наблюдая за исходным кодом DispatcherObject, я понимаю, что объект DispatcherObject может быть доступен только его ассоциированному Dispatcher. Могу ли я изменить разрешение доступа в случае перекрестной многопоточности, изменив поле _dispatcher, чтобы текущий поток мог работать правильно? DispatcherObject, эта проблема беспокоила меня давно.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Thread threadOri = Thread.CurrentThread;
Thread thread = new Thread(() =>
{
FieldInfo field = typeof(DispatcherObject).GetField("_dispatcher", BindingFlags.NonPublic | BindingFlags.Instance);
DispatcherObject obj = new UIElement();
field.SetValue(btn, obj.Dispatcher);
try
{
btn.Width = 100;
}
catch
{ }
try
{
btn.Height = 100;
}
catch
{ }
try
{
//There is an error here
TextBox tbx = new TextBox();
field.SetValue(tbx, Dispatcher.FromThread(threadOri));
btn.Content = tbx;
}
catch
{ }
field.SetValue(btn, Dispatcher);
});
thread.TrySetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
//Why is there no automatic redraw?
btn.Visibility = Visibility.Collapsed;
btn.Visibility = Visibility.Visible;
}
}