第一步:首先我們創建一個winfor的項目

第二步:我們建一個窗體
在一個窗體里面 打開一個另外的窗體 另外的窗體有一個按鈕 點擊后就開始下載 下載完成后 在注冊窗體上面 顯示下載完成(達到在一個窗體里面修改另外的一個窗體)

private void button1_Click(object sender, EventArgs e)
{
FormLoad fl = new FormLoad();
fl.Show();
}
第三步:完成下載窗體的進度條

private void button1_Click(object sender, EventArgs e) { for (int i = 0; i <= 100; i++) { this.progressBar1.Value = i; System.Threading.Thread.Sleep(300); } }
第四步:處理窗體假死問題
(用到多線程和委托)
public partial class FormLoad : Form { public FormLoad() { InitializeComponent(); //為這個委托變量賦值 changeProgerss = FunChangeProgress; } public void FunChangeProgress(int value) { this.progressBar1.Value = value; } private void button1_Click(object sender, EventArgs e) { //創建一個線程 System.Threading.Thread thr = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(Download)); thr.Start(100); } //線程方法 一定要是obje 類型參數 同時返回值是void private void Download(object obj) { for (int i = 0; i <= 100; i++) { //執行委托 changeProgerss(i); System.Threading.Thread.Sleep(300); } } //在下載窗體上面 建一個委托 public delegate void ChangeProgress(int value); //創建上面的委托的變量 public ChangeProgress changeProgerss; }
第五步:處理跨線程調用ui
線程間操作無效: 從不是創建控件“progressBar1”的線程訪問它。
for (int i = 0; i <= 100; i++)
{
//執行委托
this.progressBar1.Invoke(changeProgerss, i);
//changeProgerss(i);
System.Threading.Thread.Sleep(300);
}

第六步 主窗體添加委托 解決跨線程調用UI
public FormMain() { InitializeComponent(); sif = ShowInfoFun; } public void ShowInfoFun(string text) { this.label1.Text = text; } private void button1_Click(object sender, EventArgs e) { FormLoad fl = new FormLoad(); //在主窗體中注冊子窗體的事件 fl.eventShowInfo += new FormLoad.ShowInfo(fl_eventShowInfo); fl.Show(); } //事件的執行方法 void fl_eventShowInfo(string text) { this.label1.Invoke(sif, text); } //在主窗體這里 創建一個委托 public delegate void ShowInfo(string text); public ShowInfo sif; }
視頻下載地址:http://pan.baidu.com/share/link?shareid=1740683788&uk=540184145
需要源碼的可以到這里向樓主要:http://www.bamn.cn/redirect.php?tid=19&goto=lastpost#lastpost
