2

C#テストアプリケーションでwpfウィンドウを開こうとしました。しかし、ウィンドウを開くと、すぐに再び閉じられます。

私のコードの何が問題になっていますか?

Main.cs(ここでも入手可能):

namespace Project1
{
    class TestClass
    {
        public static MainWindow _mainWindow = null;

        static void Main(string[] args)
        {
            Thread t = new Thread(new ThreadStart(ThreadProc));
            t.SetApartmentState(ApartmentState.STA);
            t.Start();

            while (true)
            {
                System.Threading.Thread.Sleep(1000);
                _mainWindow.ToString();
            }
        }

        public static void ThreadProc()
        {
            TestClass2 testClass = new TestClass2();
            testClass.Open();
        }
    }

    class TestClass2
    {
        public void Open()
        {
            TestClass._mainWindow = new MainWindow();
            TestClass._mainWindow.Show();
            Console.WriteLine("=)");
        }
    }
}

MainWindow.xaml:

http://paste.ubuntu.com/943800/

4

3 に答える 3

7

あなたのコードは、明白な理由がないいくつかの奇妙なことをしています:

  • なぜ新しいスレッドを作成してから、すでに持っているスレッドを無限ループに入れるのですか?
  • .ToString()なぜあなたを呼び出すWindowのですか?それはさらに別のスレッドによって所有されていますか?(これにより、他のほとんどの操作と同様に所有権の問題が原因でプログラムがクラッシュするかどうかはわかりませんが、おそらくそうです)。

さらに、どこにもメッセージループを作成しないため、プログラムが機能したとしても、ユーザー入力に完全に応答しなくなります。を作成した後Window、どのスレッドで実行する場合でも、を呼び出す必要があります

System.Windows.Threading.Dispatcher.Run();
于 2012-04-24T09:28:07.257 に答える
2

[STAThread]属性が不足していると思いますMain()

于 2012-04-24T09:36:26.847 に答える
0

ShowDialog()代わりに使用しようとしましたShow()か?

于 2012-04-24T09:26:14.883 に答える