그래서이 응용 프로그램에는 몇 개의 버튼이있는 MainForm이 있습니다. 버튼은 MainForm UI로 작업하는 것을 포함하여 시간이 많이 걸리는 작업을 수행합니다. 몇 번이라도이 애플리케이션의 여러 인스턴스를 실행해야하기 때문에 MainFormHost를 만들기로 결심했습니다. 각 탭 아래에서 MainForm의 인스턴스를 만들고 탭 컨트롤을 가진 탭 컨트롤이있는 양식입니다. 그리고 지금까지 모든 것이 괜찮 았어. 문제는 MAinForm1의 버튼을 클릭하면 정상적으로 작동하지만 MainForm2의 버튼을 클릭하자 마자 MainForm1 버튼의 프로세스가 MainForm2 프로세스의 뒤에 대기하게됩니다.tabcontrol/queuing에서 여러 응용 프로그램 인스턴스 호스팅
MainForm GetMainFrom(TabPage tabPage)
{
tabPage.Invoke(new Action(() =>
{
mainForm = new MainForm();
mainForm.TopLevel = false;
mainForm.FormBorderStyle = FormBorderStyle.None;
mainForm.Dock = DockStyle.Fill;
_mainForms.Add(mainForm);
tabPage.Controls.Add(mainForm);
mainForm.Show();
}));
}
그리고 다음 메서드를 호출 : 그들은이 일을 너무 많이 될 것입니다 때문에 UI 작업 할 때
var mainFormThread = new Thread(() =>
{
mainForm = GetMainFrom(tabPage);
});
mainFormThread.SetApartmentState(ApartmentState.STA);
mainFormThread.Start();
내가 일을 호출하기 위해 MainForm 내부의 코드를 변경할 수 있지만, 나는 쉽게 한마디로
TIA
이 철저하게 설명 주셔서 감사합니다 :
이 좋은 기사이고 당신이 할 필요가 어디를 얻을 것이다 MSDN
에서.그러나 나는 당신이 설명했던 것의 대부분을 알았지 만 나의 코드에 이런 종류의 변화를 가하지 않는 길/지름길이 있다면 제 질문이있었습니다. 예를 들어, 여러 UI 스레드를 만드는 것과 같은 것을 찾고 있거나 앱의 두 인스턴스를 실행하고 서로를 차단하지 않고 정상적으로 작동 할 때 작동하는 방식을 찾으십시오. 나는 많은 창을 열어두고 인스턴스를 탭 컨트롤로 관리하는 것을 선호하지 않습니다. – Alireza
여러 프로세스 (기본적으로 실행중인 응용 프로그램의 여러 복사본) 외에도 아니요, 그렇지 않습니다. 미안하지만 근본적인 디자인 문제가 있습니다. '수정'하는 가장 간단한 방법은 작업 프레임 워크를 사용하는 것입니다. – adudley