我的工作中,我需要運行中的另一個 例如形式的項目,我有兩種形式類:Form 1和Form如何使用Invoke和Begin Invoke同步創建和控制另一個表單?
在Form1:
public void func1()
{
form2 f=new form2();
f.show();
Thread.sleep(2000);
}
當我運行此, f
這是form2的一個實例掛起,直到線程在2秒後喚醒。
我試過使用另一個線程,但它不工作正確。我知道我應該使用Invoke
和BeginInvoke()
,但我不知道如何在這裏使用它們。我是新來的委託和調用,我越讀越多,我感到困惑!請幫幫我。
EDIT1(更多信息) Form1的是主表和窗口2是一個簡單的形式與按鈕 在Form1我創建並顯示療法窗口2,如下:
public partial class Form1 : Form
{
public delegate void showdel();
public Form2 f;
public Form1()
{
InitializeComponent();
f = new Form2();
}
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(sstart);
t.Start();
Thread.Sleep(3000);
}
public void sstart()
{
f.Show();
}
}
但是當我運行這個代碼form2出現一會兒,然後迅速消失。即使當我嘗試此代碼sstart()它的工作原理是相同的:
public void sstart()
{
if (f.InvokeRequired == true)
f.BeginInvoke(new showdel(sstart));
else
f.Show();
}
我有懸掛問題呢。但進一步我想控制form1中的form2,例如更改表格2的標題。不幸的是,我沒有太多關於backgroundworker的信息以及它如何工作? 沒有人有任何參考嗎?
不要在UI線程中執行阻塞任務。你想達到什麼目的? – SLaks 2013-04-23 15:03:39
如果Form2應該是主動控制表單,則使用'ShowDialog'而不是'Show'。否則,你應該使用BackgroundWorker和Wait命令。您需要更加具體地瞭解Form2應該如何使用。 – Nevyn 2013-04-23 15:05:22
它會掛起兩秒鐘,因爲您正在讓主線程休眠兩秒鐘。這應該是密集操作的佔位符嗎?你說過你嘗試過使用另一個線程,但「它沒有工作」 - 它是如何工作的?你有沒有例外?展示給我們。向我們展示「無法使用」的代碼。解釋你期望它做什麼。 – 2013-04-23 15:07:34