摘要
在.net compact framework中,沒有backgroundworker,應該會讓我們這些用慣了backgroundworker的人感到非常的不便。backgroundworker可以非常方便解決執行緒和控制項之間的互操作問題,做出介面執行非常流暢的引用程式。(該元件因wince的某些特性,不能解決根本問題,建議還是用執行緒來解決。)
正文在反編譯了.net framework的backgroundworker後,發現基本上95%以上的**都可以直接copy過來,唯一存在問題的就是下面這段**:
if (this.asyncoperation != null)public backgroundworker()else
這段代實際上要做的事情是這樣的:如果執行該方法的執行緒和控制項所在的執行緒不是同乙個執行緒,就把該委託交給控制項所在的執行緒去執行,否則就直接執行,為了實現這個操作,我做了如下的改動,在建構函式中,我這樣寫:
所以,上面的**我做了如下的改寫:
if (thread.currentthread.managedthreadid!= this.handler)
else
post方法的**如下:
public virtual void post(sendorpostcallback d, object state) }
controltosendto 是呼叫該backgroundworker得使用者控制項。該backgroundworker得所有**是這樣的:
using system;後續using system.collections.generic;
using system.text;
using system.componentmodel;
using system.threading;
using system.windows.forms;
namespace zfb.pda.dao
remove
}/// /// 後台任務執行的進度
///
public event progresschangedeventhandler progresschanged
remove
}/// /// 後台任務完成
///
public event runworkercompletedeventhandler runworkercompleted
remove
}public backgroundworker()
private void asyncoperationcompleted(object arg)
public void cancelasync()
protected virtual void ondowork(doworkeventargs e)
}protected virtual void onprogresschanged(progresschangedeventargs e)
}protected virtual void onrunworkercompleted(runworkercompletedeventargs e)
}private void progressreporter(object arg)
public void reportprogress(int percentprogress)
public void reportprogress(int percentprogress, object userstate)
else
}public void runworkerasync(control ctl)
public void runworkerasync(control ctl,object argument)
if (ctl == null)
controltosendto = ctl;
this.isrunning = true;
this.cancellationpending = false;
this.threadstart.invoke(argument);
}private void workerthreadstart(object argument)
else
}catch (exception exception2)
runworkercompletedeventargs arg = new runworkercompletedeventargs(result, error, cancelled);
if (thread.currentthread.managedthreadid != this.handler)
else
}public bool cancellationpending
}public bool isbusy
}public bool workersupportscancellation
set}
public virtual void post(sendorpostcallback d, object state)
}private delegate void workerthreadstartdelegate(object argument);
public delegate void sendorpostcallback(object state);
}}
PDA開發系列 資料庫的選擇
摘要 程式的最終執行環境是wince6.0,所以可以選擇的資料庫也相對比較的多,比方說 access sqlce,當然還可以用xml來充當資料庫,access有個弊病,我想大家可能都知道,就是執行的時間一長,資料庫檔案會越來越大,儘管可以通過壓縮的方式來釋放掉,但是,這並不是乙個好的選擇 xml畢竟...
Android掃瞄槍 PDA 開發
最近在負責pda的開發,在掃瞄事件的處理上,花費了一些時間,但是,最終功夫不負有心人,總算找到乙個好點的解決方案,不說了,上 該文字框新增掃瞄事件.但是該掃瞄事件有乙個明顯的bug,當掃瞄出的字元是乙個的時候,就無法區分出是掃瞄事件還是手動輸入的事件。edittext.addtextchangedl...
PDA開發經驗小結 轉共享
有以下一些經驗可以共享 1。除錯上。最開始開發,碰到最大的問題就是除錯,pda的客戶端程式除錯時跟不進webservice。當時花了很多精力研究,最後發現原來需要手工把名字為w3c的程序附加到除錯程序中去。在普通應用中ide其實是自動幫我們作了這個事情,但在pda專案中,需要手工做的。微軟啊,你留的...