如何最大化并将WPF主窗口置于桌面前端?我有一个监视目录的filewatcher。如果在目录中创建了一个新文件,我想将我的WPF应用程序主窗口带到dekstop的前面。如您所见,我在mainwidnow上尝试了几种方法。
修改后的代码:(我收到以下错误:“调用线程无法访问此对象,因为另一个线程拥有它”)
DispatcherOperation o = Dispatcher.CurrentDispatcher.BeginInvoke(new
Action(delegate
{
var win = System.Windows.Application.Current.MainWindow;
win.Activate();
win.WindowState = System.Windows.WindowState.Normal;
win.Topmost = true;
win.Focus();
}), System.Windows.Threading.DispatcherPriority.ContextIdle, null);
Debug.WriteLine("Invoke");
o.Wait();
修改2(尝试获取主窗口的调度程序。我仍然得到“”调用线程无法访问此对象,因为另一个线程拥有它“。
System.Windows.Application.Current.MainWindow.Dispatcher.Invoke(() =>
{
var win = System.Windows.Application.Current.MainWindow;
win.Activate();
win.WindowState = System.Windows.WindowState.Normal;
win.Topmost = true;
win.Focus();
}, DispatcherPriority.Normal);
更新(工作) 我想我并没有用上面的例子把调度员叫到主窗口。我最终在窗口类中创建了一个名为_mainWindow的变量,类型为MainWindow。在MainWindow构造函数中,我实例化了变量: _mainwidow = this;
然后我在我使用FileWatcher的类的构造函数中传递_mainwindow变量。在这里,我可以访问_mainwindow变量的调度程序:
_mainWindow.Dispatcher.Invoke(() =>
{
var win = System.Windows.Application.Current.MainWindow;
win.Activate();
win.WindowState = System.Windows.WindowState.Normal;
win.Topmost = true;
win.Focus();
}, DispatcherPriority.Normal);
答案 0 :(得分:1)
试试此代码
Dispatcher.Invoke(() =>
{
this.Activate();
this.WindowState = System.Windows.WindowState.Normal;
this.Topmost = true;
this.Focus();
});