我正在使用基於DirectX的模擬器。 我必須檢查設備是否已插入設備或從PC中取出設備。在C#中如何根據另一個線程中的類來顯示來自另一個GUI的GUI?
我已經設法在另一個線程上設備到達和移除的類,這會在設備到達或移除時從線程本身引發事件。 正在調用相應的事件方法的主窗體中:
假設Form1
是主窗口,Form2
是輔助窗口。
Form2 form2Instance = new Form2();
我想表明另一種形式(Form2
)由
在保持主窗口(Form1
)的後面(相同的,因爲它表現爲在一般情況下form2Instance.ShowDialog();
) 試了幾次我都做到了之後Applicatin.Run(new Form2());
,但Form2不以任何方式表現爲'form2Instance.ShowDialog();
。
只是給的代碼,如果它可以在回答幫助:
iARMdetectionThreadClass detection;
InProgram_iARMdetection iARMStatusGUI;
private void Form2_Load(object sender, EventArgs e)
{
iARMStatusGUI = new InProgram_iARMdetection();
detection = new iARMdetectionThreadClass();
detection.IniARM_device_Arrive += new iARMdetectionThreadClass.iARM_device_ArrivedEventHandler(detection_IniARM_device_Arrive);
detection.IniARM_device_Remove += new iARMdetectionThreadClass.iARM_device_RemovedEventHandler(detection_IniARM_device_Remove);
detection.startThread();
}
void detection_IniARM_device_Remove(iARM_deviceInfo senderInfo)
{
detection.StopCheckBeingRemoved();
MethodInvoker act = delegate
{
this.label_iARMStatus.Text = detection.iARM_deviceInf.iARMStatus;
};
this.label_iARMStatus.BeginInvoke(act);
Application.Run(new InProgram_iARMdetection()); //Blocking code
detection.StartCheckBeingRemoved();
}
void detection_IniARM_device_Arrive(iARM_deviceInfo senderInfo)
{
MethodInvoker act = delegate
{
this.label_iARMStatus.Text = detection.iARM_deviceInf.iARMStatus;
};
this.label_iARMStatus.BeginInvoke(act);
//detection.StopCheckArriving();
//detection.StartCheckArriving();
}
我需要的代碼是阻止代碼。在此處:
Application.Run(new InProgram_iARMdetection()); //Blocking code
如果設備再次插入PC,則出現的對話框必須單獨插入。這表現不錯,但在主窗口後面。 – Rick2047 2010-04-14 11:21:43
顯然,如果你想讓form2顯示爲對話框,你必須使用ShowDialog()方法。爲什麼在事件中使用Application.Run而不是ShowDialog()? – 2010-04-14 11:22:08
@Aseem Gautam:Bcos當我使用form2Instance.ShowDialog()時,它第一次顯示,之後它也消失了,但在下一個刪除事件中不起作用。不知道爲什麼。所以Application.Run(new Form2()); – Rick2047 2010-04-14 13:07:25