Form2是Form1的子界面。上面有個含有120個控制元件的TLP,是代碼動態生成的。
流程是這樣的
Form2 X=new Form2();
CreateTLP(X)//生成120個控制元件的TLP,然后add打Form2上 這步有2秒多
X.Showdialog(); //這步有4秒多。
我有嘗試把CreateTLP和Showdialog放在一個函式里面,然后做個委托,報錯為用了本執行緒的資源了。
我是想,點擊進入Form2的界面,先出來一個loading的Pop界面,我已經做好了,等ShowDialog()完成,關閉掉loading界面,顯示Form2界面,怎么實作呢?
uj5u.com熱心網友回復:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private async void button1_Click(object sender, EventArgs e)
{
//打開form2 模仿 loading影片
Form2 f2 = new Form2();
f2.Show();
BeginInvoke(act,f2);
}
//Task.Delay(5000) 模仿加載控制元件耗時
public Func<Form,Task<bool>> act = async(x)=>{
await Task.Delay(5000);
x.Close();
return true;
};
}
uj5u.com熱心網友回復:
不是,有3個界面,第一個是form1主界面,第二個是有TLP的form2,第三個是有loading GIF的form3.form1點擊打開form2.
因為 動態加載TLP+form2.showdialog需要6秒。
所以點擊打開form2,先跳出form3來loading,然后等form2跳出來了,自動關掉form3,然后就可以操作form2了。
uj5u.com熱心網友回復:
可以托管委托加事件的方式,在form1加載時就把CreateTLP(X)加載出來,然后form2就直接可以用了。類似于這種該方式。
https://blog.csdn.net/qq_38977566/article/details/114139986
uj5u.com熱心網友回復:
你還不如點擊按鈕的時候打開load視窗,同時創建form2,form2創建完成后關閉load展示form2總覺的是你代碼有問題,不然怎么可能這么久
uj5u.com熱心網友回復:
async Task<Form2> CreateForm2(){
Form2 X=new Form2();
await X.CreateTLP(X) ;
}
呼叫
var form2=await CreteForm2()
form2.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/274301.html
標籤:C#
