打开第二个Wpf窗口

时间:2013-12-06 17:56:04

标签: c# wpf

我有一个类(CoreClient.cs)管理所有程序,我的程序有很多wpf窗口不能同时打开。 当CoreClient尝试打开第一个窗口(Config.xaml)询问配置数据时,一切都很好!! 当CoreClient尝试打开第二个窗口时,我收到错误。 (Login.xaml)这应该是登录窗口,我已尝试过其他窗口,我总是收到相同的错误。给人的印象是,出于某种原因,我无法打开任何窗口。

有什么想法吗?

CoreClient.cs

using System.Threading;
using System.Windows;
using MioEngine;

namespace Client
{
    private EventWaitHandle _wait= new EventWaitHandle(false, EventResetMode.AutoReset);

    public class CoreClient
    {
      //[...]
      var _config = new Configuration(_wait);
      Application.Current.Run(_config);
      _wait.WaitOne();
      //some data from _config is taken when _config close...
      var _login = new Login(_mySocket, _wait);
      Application.Current.Run(_login);
      _wait.WaitOne();
      //[...]
    }
}

Config.xaml

using System;
using System.Net.Sockets;
using System.Threading;
using System.Windows;

namespace Client
{
    public partial class Configuration: Window
    {
        private EventWaitHandle _wait;

        public Configuration(EventWaitHandle wait)
        {
            InitializeComponent();
            _wait = wait;
            //
        }

        private void bExit_Click(object sender, EventArgs e)
        {
            //takes parameters from many textbox
            wait.Set();            
            this.Close();
        }
    }
}

Login.xaml

using System;
using System.Net.Sockets;
using System.Threading;
using System.Windows;
using MyEngine;
using MyPack;

namespace Client
{
    public partial class Login: Window
    {
        public Login(MySocket socket, EventWaitHandle wait)
        {
            InitializeComponent();   //<------ InvalidOperationException
            _wait = wait;
            //some code...
        }

        private void bExit_Click(object sender, EventArgs e)
        {      
            //Control and setup the network and makes the LOGIN 
            wait.Set();       
            this.Close();
        }
    }
}

继续尝试我发现如果我从WPF窗口运行所有这一切,那就没问题了(但我必须为我创建一个不可用的父窗口)。

还试过Show和ShowDialog有一些问题: 使用Show我没有例外,但我的第二个窗口没有显示(使用EventWaitHandle) Tith ShowDialog我的CoreClient在第二个窗口启动后保持循环或等待某事

1 个答案:

答案 0 :(得分:0)

这就是我这样做的方式 但是我必须为任何辅助窗口使用UserControl或Page(而不是Window) 但它们的外观和行为就像一个窗口

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        NavigationWindow navWin = new NavigationWindow();
        navWin.Content = new UserControl1();
        navWin.ShowsNavigationUI = false;
        navWin.Show();
    }
}