我尝试在c#test应用程序中打开一个wpf窗口。 但是当我打开窗户时,它会立即再次关闭。
我的代码出了什么问题?
Main.cs(也可用here):
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:
答案 0 :(得分:7)
你的代码做了一些奇怪的事情,没有明显的理由:
.ToString()
上调用Window
,而Window
又由另一个线程拥有? (我不确定这是否会导致您的程序因所有权问题而崩溃,就像大多数其他操作一样,但很可能)。此外,您不会在任何地方创建消息循环,因此即使程序运行,它也会完全没有响应用户输入。创建System.Windows.Threading.Dispatcher.Run();
之后,无论你做什么线程,都应该调用
{{1}}
答案 1 :(得分:2)
我相信您错过了Main()
答案 2 :(得分:0)
您是否尝试使用ShowDialog()
代替Show()
?