前一陣子開始玩起 Plurk (噗浪) 的 API (雖然他在我硬碟沈睡很久了)
也利用 API 在 Visual Stdion.Net 上作些小程式
一開始遇到的就是常見的問題,按下登入鈕後,畫面就 hang 在那好一陣子才能繼續動作
這不是程式的錯,而是初學者都會遇到的小問題,因為 .... 程式在等待網頁的回應
這段過程總是出乎意料的漫長
(真的,我真的搞不懂為啥利用 WebRequest 或 xmlhttp 去取網路上的檔,總是會發生過很久才會回傳的問題,總感覺跟用瀏覽器直接開網頁差很多 ...)
這時就有兩條路可以讓使用者選擇了,一個是利用 Thread ,建立另一執行緒來等待,而表單則畫個漂亮的 Loading 圖案等 WebRequest 回應!而另一條路則是利用 .Net 提供的 BackgroundWorker 元件來輔助
後者真是佛心來著的,可以讓使用者很簡易的就把一些需較費時等待結果的運算丟給另一執行緒去作,而不用考慮中間繁複的過程
而利用 Thread 的話,又要建 Thread ,然後 Start ,再來運算結果要怎呈現呢?初學者大概會直接變更 UI ,然後就又遇到「Cross-thread operation not valid: Control 'label1' accessed from a thread other than the thread it was created on.」這問題,最後繞一大圈才發現要自己建 delgate ,然後又 invoke 或 begininvoke 呼叫他,過程其實很繁雜~
不過可以讓使用者更加認識 Thread 就是了!
void button1_click(object sender, EventArgs e)
{
Thread t = new Thread(worker);
t.Start();
}
delgate void SetText(string str);
void worker()
{
SetText fun = setText;
for(int i=0;i<100;i++)
{
this.Invoke(fun, i.toString());
}
}
void setText(string str)
{
label1.Text = str;
}
好吧,真的沒啥掰到跟 Plurk 相關的事...
至於該程式的話,等作好一段落在拿上來獻醜吧
話說自身這邊好多半成品(寫到一半的程式),把他寫完嘛... 是沒動力,不把他寫完嘛 ... 看了又礙眼
總覺得應該先把我以前的東西給寫完整在來寫新的,要不然好像會越積越多半成品(汗~
留言列表