PDA開發系列 BackgroundWorker

2022-02-07 10:18:49 字數 2657 閱讀 3026

摘要

在.net compact framework中,沒有backgroundworker,應該會讓我們這些用慣了backgroundworker的人感到非常的不便。backgroundworker可以非常方便解決執行緒和控制項之間的互操作問題,做出介面執行非常流暢的引用程式。(該元件因wince的某些特性,不能解決根本問題,建議還是用執行緒來解決。)

正文在反編譯了.net framework的backgroundworker後,發現基本上95%以上的**都可以直接copy過來,唯一存在問題的就是下面這段**:

if (this.asyncoperation != null)

else

這段代實際上要做的事情是這樣的:如果執行該方法的執行緒和控制項所在的執行緒不是同乙個執行緒,就把該委託交給控制項所在的執行緒去執行,否則就直接執行,為了實現這個操作,我做了如下的改動,在建構函式中,我這樣寫:

public backgroundworker()

所以,上面的**我做了如下的改寫:

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專案中,需要手工做的。微軟啊,你留的...