2012-02-26 2 views
3

Я создаю приложение Kinect и хочу открыть новое окно под названием «Справка» из файла «MainWindow.xaml.cs».Как вы открываете новое окно в 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

Есть ли причина, по которой вы хотите показать это окно в отдельной теме? Вы можете это сделать, но это редко нужно. –

+0

@Joshua - Если вы показываете окно в другой теме, пожалуйста, поймите, что это не будет поток пользовательского интерфейса. См. Здесь: http://www.codehosting.net/blog/BlogEngine/post/Opening-WPF-Windows-on-a-new-thread.aspx для полного руководства – MyKuLLSKI

ответ

6

Отображение окна просто требует вызова его метода Show ,

Однако для поддержания работы приложения требуется позвонить по телефону Application.Run. Если вы передадите этот метод в форме, он вызовет для вас Show.

Однако, если у вас уже есть работающее приложение, вы можете просто сделать что-то вроде new MyForm().Show().

Я сильно подозреваю, что вам не нужно создавать новую тему и Application для вашего нового окна. Разве вы не можете использовать:

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

Спасибо, что я пытался усложнить ситуацию. – Joshua

+0

@ Джошуа, пожалуйста. –

1

Я не понимаю, почему вы запустите приложение там, но, как правило, вы открываете окно, путем создания экземпляра и showing его.

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

Также как это на фоне нити, это может вызвать проблемы с точки зрения межконтрольной связи. Обычно вам нужно создавать и получать доступ к элементам UI только в потоке пользовательского интерфейса. Чтобы переместить любую операцию в UI-поток, вы можете использовать Dispatcher UI-потока. Смотрите также: Threading Model

0

Если вам нужен ваш собственный, просто добавьте в проект новую форму, или создать свой собственный из Стретч и вызвать

myForm.Show() 
Смежные вопросы