我試圖製作一個跨平臺的WinForms軟件,它內部有一個GUI和一個3D窗口。目前,我有兩個選項卡的TabControl,第二個需要包含GLControl(3D窗口)。但是,當我切換到第二個選項卡時,程序在GLControl加載時掛起,大概是因爲它們在同一個線程中。用C#,WinForms和OpenTK異步加載GLControl
我試圖用一個BackgroundWorker這樣解決的:
private void onTabSwitch(object sender, EventArgs e)
{
if (tabControl.SelectedIndex == 1)
if (area3D == null)
this.worker.RunWorkerAsync();
}
...
...
...
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
area3D = new GLControl();
area3D.Load += new EventHandler(area3D_Load);
area3D.Paint += new PaintEventHandler(area3D_Paint);
area3D.BackColor = Color.Black;
area3D.Size = new Size(438, 435);
area3D.Location = new Point(200, 0);
this.Invoke((MethodInvoker)delegate
{
secondTab.Controls.Add(area3D); // runs on UI thread
});
}
但它仍然掛起,因爲第二個選項卡仍是主要的GUI線程。我該如何解決這個問題?底線,我需要一個3D窗口在另一個選項卡,將異步加載,或只是不會導致我的程序掛起。