網頁

搜尋此網誌

2010年3月31日 星期三

Windows Presentation Foundation Threading Model

最近撰寫的應用程式遇到多的Window互動的問題,因此我們來談談Windows Presentation Foundation (WPF)中的執行緒(Thread),WPF中有個執行緒模型(Threading Model)的觀念,可能和以前的Windows開發不太一樣!

可以參考MSDN:
或是MSDN Magazine這篇文章:
這裡要闡述一個觀念,基本上來說,Windows應用程式只會有一個執行緒在執行程式碼,換句話說,如果你讓執行緒Sleep的話,或者正在等候某項工作,則整個Window不會回應你任何事情,這是很糟糕的事情!

在WPF中,事情似乎比較不一樣!在MSDN中解釋:「一般而言,WPF 應用程式開始時會使用兩個執行緒:一個是用於處理轉譯,而另一個則是用於管理 UI。轉譯執行緒可有效地以隱藏方式在背景執行,而 UI 執行緒則會接收輸入、處理事件、繪製螢幕以及執行應用程式程式碼。」這點就和一般的Windows視窗應用程式不相同,一般的Windows視窗應用程式(比方說Windows Form)程式執行後就只有一個執行緒,沒有WPF所謂的轉譯執行緒。WPF的轉譯執行緒使用來更新UI的呈現,一般而言我們都不會去使用。

雖說這小小的不太一樣:WPF使用兩個執行緒執行Windows視窗應用程式。可是在實際應用上,你還是必須自己處理執行緒的問題,因為WPF程式中程式設計師還是只有一個執行緒可以控制使用,為了提供較好的使用者體驗,MSDN建議使用Dispatcher的功能,目前還在研究當中,待續...

2010年3月25日 星期四

Windows Presentation Foundation

Windows Presentation Foundation 簡稱 WPF (開發代號是 Avalon ),WPF 是 .NET Framework 之後用來建置 User Interface (UI) 的基礎,目的是建置 Windows 的視窗化介面軟體。

從歷史上來看 Windows 應用程式建置的技術,可以分下列四個階段:
  • 1985年:使用 Windows API 開發
  • 1992年:使用 Microsoft Foundation Classes (MFC) 開發
  • 2001年:使用 Windows Form 開發
  • 2006年:使用 Windows Presentation Foundation (WPF) 開發
使用 WPF 開發 Windows 比較像是網頁 (Web Page) 的感覺,WPF 包含 XAML (全名是 Extensible Application Markup Language,唸做 Zammel 發音) 的標記式語言,XAML 類似 HTML 的想法,可以使用 XAML 建置一個 Windows 的視窗化介面程式,當然 XAML 主要是呈現的設計,程式處理邏輯的部分還是要用 C# 或是 VB.NET 撰寫。

XAML 和 HTML 一樣是一種宣告式語言 (declarative language),用來描述做什麼 (What to do),但沒辦法說明該如何執行功能,要描述如何做 (How to do) 的話,則要使用命令式語言 (imperative language) 如 C# 或是 VB.NET 的程式語言。必須注意的是 XAML 和XML 一樣是區分大小寫的 (case-sensitive),還有 WPF 不一定必須使用 XAML,你也可以直接使用 WPF 的類別產生 Windows 視窗應用程式。

利用 WPF 開發的專案必須有 Application 和 Window 的主從觀念,這不像是 Main 函式的觀念,WPF 應用程式是一個 Application 物件 (應用程式的進入點),Application 物件可以產生多個 Window 物件(這是我們設計的UI視窗),剩下的事情 WPF 會幫你處理好。

建立 WPF 應用程式的名稱空間主要是以 System.Windows 開始的名稱:
使用WPF開發實在有吸引人的地方,建議大家開始使用吧!

2010年3月19日 星期五

Windows Workflow Foundation工作流程基礎

最近我開始研究Windows Workflow Foundation,簡稱WF,這個基礎(Foundation)主要是用來處理工作流程(Workflow),注意到WF是在.NET Framework 3.0之後才有的功能。

什麼是工作流程(Workflow)呢?工作流程(Workflow)是指一個項目(Item)從一個人移動到另一個人的過程(process)。在商業世界當中,這樣的過程則是業務流程(Business Process),業務流程會定義完成一件工作(Work)所需要的多個階段(Step),換句話說,一個階段完成,接續下一個階段,直到所有的階段都完成,一件工作將結束。

WF的工作流程可以分成兩類:State-Based Workflow與Sequential Workflow。State-Based Workflow(State Machine Workflow)的工作流程必須是每個階段的條件(稱為External Entity)都滿足才會繼續下一個階段。而Sequential Workflow則是一連串階段的工作,通常沒有分支(branching)和迴圈(looping),注意是可以有分支與迴圈喔!Sequential Workflow開始之後,每個階段依序執行到工作結束為止,除非發生例外錯誤才會終止,不會像State Machine Workflow會中途停止等待。

我們使用Windows Workflow Foundation最大的理由是模型(Model),多數的商業流程都會使用案例圖(case diagram)、UML diagram或是最簡單的流程圖(flow chart)等,用來表示商業流程,對於Windows Workflow Foundation而言WF模型就等於同於工作流程。

Windows Workflow Foundation是WinFX編程模型(programming model)中的一部分,WinFX是在Windows Vista作業系統後才使用的模型(即.NET Framework 3.0),這個模型當中包含工作流程引擎(workflow engine)、API與程式庫(library),我們可以使用System.Workflow...的三個名稱空間呼叫使用WF的API。
WF的運作由三個元件構成。第一個是活動(activity),Workflow是由一系列的活動組合而成,而活動是最小的單位,工作流程中可以包含一個或是多個活動,WF中已經包含現成可用(out-of-the-box)的活動,我們可以直接利用以便加速開發。

第二個元件是工作流程引擎(workflow engine),引擎執行Workflow的動作,提供排程(Scheduling)服務、狀態管理服務、規則(Rule)服務。

最後一個元件是主機處理序(Host Porcess),WF本身不提供直接執行,必須由其他應用程式的處理序呼叫,像是Windows應用程式或是ASP.NET程式呼叫。因此,通常將WF設計成程式庫(Library)的方式!

Windows Workflow Foundation內建的活動有下列幾個:
  1. Code Activity
  2. Compensate Activity
  3. Conditional Activity Group
  4. Delay Activity
  5. EventDriven Activity
  6. Fault Handler Activity
  7. IfElse Activity
  8. Invoke Web Service Activity
  9. Listen Activity
  10. Parallel Activity
  11. Policy Activity
  12. Replicator Activity
  13. Sequence Activity
  14. SetState Activity
  15. State Activity
  16. StateInitialization Activity
  17. Suspend Activity
  18. Terminate Activity
  19. Throw Activity
  20. Transaction Scope Activity
  21. While Activity
這些現成可用(out-of-the-box)的活動應該已經滿足大多數的需求!詳細請參考MSDN:http://msdn.microsoft.com/zh-tw/library/bb628449%28v=VS.90%29.aspx

熱門文章