【发布时间】:2017-12-02 05:48:30
【问题描述】:
如何最大化 WPF 主窗口并将其带到我的桌面前面?我有一个监视目录的文件监视器。如果在目录中创建了一个新文件,我想将我的 WPF 应用程序主窗口带到桌面的前面。如您所见,我在 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 = 这个;
然后我在使用 FileWatcher 的类的构造函数中传递 _mainwindow 变量。这里我可以访问_mainwindow变量的dispatcher:
_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);
【问题讨论】:
-
this 回答有帮助吗?
-
使用主窗口的
Dispatcher而不是当前窗口是否有效? -
Streamline,我尝试通过更改代码来获取主窗口的调度程序。参见上面的修改 2。我仍然得到“调用线程无法访问此对象,因为不同的线程拥有它”。
标签: wpf