如何使用另一个线程隐藏 window?

How to hide a window using another thread?

我用 NotifyIcon 创建了一个 WPF 应用程序,我使用 this.Hide() 将其最小化,但现在我希望它在执行后可以最小化,所以我调用 this.Hide() 在方法 MainWindow_Loaded 中,但是一旦我启动应用程序, window 的内容就会变黑。

然后我尝试在另一个线程中调用 this.Hide(),这就是我的代码的样子...

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
...
   Thread thread = new Thread(DoWork);

   thread.Start();
   Console.WriteLine("thread start");

   while (!thread.IsAlive) ;

   Thread.Sleep(500);

   thread.Join();
   Console.WriteLine("thread has terminated.");
...
}

public void DoWork()
{
    this.Hide();
}

然后我遇到了问题,当调用DoWork()时,它显示Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on.我应该怎么做才能避免这种情况?谢谢!

您需要使用 Dispatcher 对象。

Dispatcher.BeginInvoke((Action) (() =>
    {
        // your code
    }));