【问题标题】:How can I bring the main WPF window to the front?如何将 WPF 主窗口置于最前面?
【发布时间】: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


【解决方案1】:

试试这个代码

 Dispatcher.Invoke(() =>
            {
                this.Activate();
                this.WindowState = System.Windows.WindowState.Normal;
                this.Topmost = true;
                this.Focus(); 
            });

【讨论】:

  • 我正在使用 Dispatcher.CurrentDispatcher.BeginInvoke,因为看起来 Dispatcher.Invoke 在 .Net 4.6 中不可用。此外,“this”在我的方法中对我不起作用,因此我获取了对 MainWindow 的引用。当我尝试获取对 Window 的引用时,现在出现以下错误:“调用线程无法访问此对象,因为不同的线程拥有它”请参阅上面的修改代码。
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 2011-11-04
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
相关资源
最近更新 更多