Преобразование аргумента в int. Это так же просто, как
int(argument)
Как msdn указывает:
private void NewWindowHandler(object sender, RoutedEventArgs e)
{
Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
}
private void ThreadStartingPoint()
{
Window1 tempWindow = new Window1();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}
РЕДАКТИРОВАТЬ: это старый ответ, но, поскольку кажется, что его часто посещают, я мог бы также подумать о следующих модификациях / улучшениях (не проверенных).
Если вы хотите закрыть такое окно, просто сохраните ссылку на окно объект извне потока (делегат), а затем вызвать close для него, примерно так:
void CloseWindowSafe(Window w)
{
if (w.Dispatcher.CheckAccess())
w.Close();
else
w.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(w.Close));
}
// ...
CloseWindowSafe(tempWindow);
Если новый поток может быть завершен (принудительно прерван), в соответствии с вопросом в комментариях:
private void ThreadStartingPoint()
{
try{
Window1 tempWindow = new Window1();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}
catch(ThreadAbortException)
{
tempWindow.Close();
System.Windows.Threading.Dispatcher.InvokeShutdown();
}
//the CLR will "rethrow" thread abort exception automatically
}
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: don ' Чтобы делать это дома, прерывание потоков (почти всегда) противоречит лучшим практикам. Потоки должны изящно обрабатываться с помощью любого из различных методов синхронизации или, в данном случае, просто через вызываемое окно . Close ()
Думаю, я нашел ответ. Посмотрите ответ Джона Скита на этот вопрос .
В основном вы делаете это в методе запуска потока:
private void ThreadStartingPoint()
{
Window1 tempWindow = new Window1();
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}