나는 스폰Form
으로 평소와 같이 사용할 수 있지만 메인 스레드는 이후에 무엇을 하든지 계속해야합니다. 내가 양식을 사용할 수 없습니다 이하 나는이 개 기술을 시도 할 때 : 양식을 생성하고 주 스레드를 차단하지 않는 방법은 무엇입니까?
static class Program
{
private static void spawnForm1()
{
new Form1().Show();
}
private static void spawnForm2()
{
// solved: use ShowDialog() instead of Show() here
ThreadPool.QueueUserWorkItem(o => { new Form1().Show(); });
}
[STAThread]
static void Main()
{
spawnForm1();
MessageBox.Show("main thread continues");
// now anything can happen: background processing or start of main form
// sleeping is just an example for how the form is unresponsive
Thread.Sleep(30 * 1000);
}
}
그래서 어떻게 간단한 형태를 생성하고 메인 쓰레드를 계속 할 수 있습니까? 메시지 상자와 마찬가지로 응답해야합니다.
(또한, 나는 Application.Run(...);
를 사용할 수 있으며 메인 스레드를 차단한다면 나는 ShowDialog()
을 사용할 수 없습니다 : 나는별로 명성을 가지고 미안하지만, 내가 정말 필요 멍청한 놈 질문하지 않습니다 설명하려고했던 것처럼 스폰 됨)
이것은 심각한 디자인 문제처럼 들립니다. * my * WinForm 앱의 주 스레드는 항상 UI를 담당하고 다른 스레드 (스레드 풀 및/또는 백그라운드 작업자)는 다른 비 시각적 작업을 담당합니다. 귀하의 질문은 내게 당신이 그것을 다른 방향으로하고 싶다고 생각합니다. –
@UweKeim 주 창은 항상 같은 응용 프로그램에 의해 실행됩니다. 그러나 기존의 메인 윈도우와 그렇지 않은 윈도우 모두에서 설명하는 것처럼 윈도우를 생성해야합니다. – Bitterblue
주 스레드에서 창을 시작하고 대신 해당 창에서 백그라운드 처리를 수행하십시오. –