我有一个额外的课的小程序。在Main
线程中,我启动了另一个线程,该线程启动了该类中的方法。现在,我将从类中设置标签的可见性。我试图这样做:
MainWindow main = new MainWindow();
...
main.lable.Visibility = Visibility.Visible;
该程序给我的错误是线程必须是STA-Thread
。
我怎样才能做到这一点?谢谢!
修改UI的线程必须是STA thread。而且它必须有一个消息循环,所以我们正在谈论您的应用程序主线程。您可以在此处阅读有关WPF线程的更多信息。
关键是您必须使用Dispatcher.BeginInvoke方法。
为了解决您的问题,假设它lable
是公共的,请在辅助线程中尝试使用以下代码:
main.Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
new Action(() => main.lable.Visibility = Visibility.Visible));
希望对您有所帮助。
编辑
我用一个关于从辅助线程更新UI的简单示例来编辑我的答案:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Task task = new Task(new Action(() => ExecuteOnSeparateThread()));
task.Start();
}
private void ExecuteOnSeparateThread()
{
Thread.Sleep(2000);
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
new Action(() => Label.Foreground = Brushes.Red));
}
}
我不知道您的完整代码,因此我只能通过提供一个可以引导您走正确道路的示例来帮助您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句