2012-02-26 67 views
3

我正在創建一個Kinect應用程序,並希望從'MainWindow.xaml.cs'文件打開一個名爲'Help'的新窗口。如何在C中打開一個新窗口#

我嘗試使用下面的代碼:

// The commented code is what I have tried. 
public static void ThreadProc() 
{ 
    // Window Help = new Window(); 
    //Application.Run(new Window(Help);  

    Application.Run(new Form()); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 

    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc)); 

    t.Start(); 
} 
+0

是否有你想在單獨的線程上顯示此窗口的原因?你可以做到這一點,但很少需要。 – 2012-02-26 22:16:12

+0

@Joshua - 如果你在另一個線程上顯示一個窗口,請理解它不會是一個UI線程。請參考這裏:http://www.codehosting.net/blog/BlogEngine/post/Opening-WPF-Windows-on-a-new-thread.aspx一個完整的教程 – MyKuLLSKI 2012-02-27 02:27:09

回答

6

顯示一個窗口,只是要求其Show方法的調用。

但是,保持應用程序運行需要致電Application.Run。如果你通過這個方法,它會給你打電話Show

但是,如果您已經有正在運行的應用程序,則可以執行類似new MyForm().Show()的操作。

我強烈懷疑您不需要爲您的新窗口創建新線程並Application。你不能只使用:

private void button1_Click(object sender, EventArgs e) 
{ 
    new Form().Show(); 
} 
+0

謝謝我試圖過分複雜的事情。 – Joshua 2012-02-26 22:59:55

+0

@Joshua,不客氣。 – 2012-02-27 09:31:35

1

我不明白爲什麼你運行應用程序存在,但通常是通過創建一個實例,並showing它打開了一扇窗。

var window = new Help(); // Help being the help window class 
window.Show(); 

也作爲這在後臺線程上它可能會導致在控制間通信方面的麻煩。通常你只想在UI線程上創建和訪問UI元素。要將任何操作移至UI線程,您可以使用UI線程的Dispatcher。另請參見:Threading Model

0

如果你需要你自己的,只是添加到項目中的新形式,或者從stratch創建自己的,並呼籲

myForm.Show() 
相關問題