如何使用另一个线程隐藏 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
}));
我用 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
}));