如何在WPF中设置另一个类的元素的可见性?

时间:2015-06-13 14:38:25

标签: c# wpf multithreading

我有一个额外课程的小程序。在Main线程中,我启动了另一个在该类中启动方法的线程。现在我将设置类中标签的可见性。我试图这样做:

MainWindow main = new MainWindow();
...
main.lable.Visibility = Visibility.Visible;

该程序给出了一个错误,即线程必须是STA-Thread

我该怎么做? 谢谢!

1 个答案:

答案 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));
    }
}

我不知道您的完整代码,所以我可以通过提供一个可以引导您走上正确道路的示例来帮助您。