我有一个额外课程的小程序。在Main
线程中,我启动了另一个在该类中启动方法的线程。现在我将设置类中标签的可见性。我试图这样做:
MainWindow main = new MainWindow();
...
main.lable.Visibility = Visibility.Visible;
该程序给出了一个错误,即线程必须是STA-Thread
。
我该怎么做? 谢谢!
答案 0 :(得分:3)
修改UI的线程必须是 STA线程。此外,它必须有一个消息循环,所以我们谈论你的应用程序主线程。您可以阅读有关WPF线程here的更多信息。
重点是你必须使用Dispatcher.BeginInvoke method。
要解决您的问题,假设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));
}
}
我不知道您的完整代码,所以我可以通过提供一个可以引导您走上正确道路的示例来帮助您。