標籤: 網智數位.軟體開發

軟體對企業的價值(軟體開發、軟件開發、客制化軟體)

    這半年,我發覺委託我們開發軟體的客戶,幾乎都再次委託我們進行擴充功能,而且或許值得開心的,除了以往企業管理軟體系統(ERP、進銷存、CRM、POS)等,開始很多客戶為了創造原來產品的價值,開始重視軟體可以帶來的價值。

aa   

    例如,其中一個客戶工業設備空調大廠原本在自有的產品,具有一定的市場競爭性,但客戶董事長,認為如果可以透過軟體來提升使用設備的效益,所以再次委託我們開發軟體,來偵測使用設備的用電量趨勢圖、溫度的變化、散熱效果等,來產生各種圖表、趨勢圖,給客戶不止使用硬體設備,還可以因為使用硬體設備,透過軟體來增加附加價值,給客戶建議用電量使用狀況,而且可以透過軟體管理界面來管理大量的設備,例如批次關閉設備、開啟設備、設定警示音效,當達到某個電量數據、溫度數據,可以發出警報。

    上面我提客戶只是近來一個案例,這個客戶董事長非常有前瞻性思維,他把軟體直接附贈給購買設備的終端客戶,讓原本已經具有競爭性產品設備、更因為軟體的價值,來建立與競爭同業更大的產品優勢,其他競爭廠商還幾乎停留在設備跟價格定價的商業手法。


網智數位-軟體開發(軟件開發)

針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰

業務合作、軟體委外開發

業務窗口:allen@netqna.com

聯繫電話:0920-883-870

公司電話:02-55991310

公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓

skype: netqna

line:netqna

微信:netqna

黃先生 Allen

使用 Task 自行控制非同步任務作業【軟體開發、軟件設計、客製化軟體、軟體設計】

   在之前我寫過兩篇關於使用 Parallel 類別進行多任務的平行作業 ,1.透過 Parallel 類別操控多任務平行作業(一)。 2.透過 Parallel 類別操控多任務平行作業(二)。 , 但因為使用 Parallel 類別雖然方便,因為都被.Net 包裝著很好,各自的執行緒任務獨自運作,如果有時我們想要更進一步的控制每個平行任務任務時,就必須使用  Task<TResult> 與 Task 類,這兩個類別可以有效地自行控制建立非同步任務,可以由程式開發人員決定什麼時候要啟用任務、什麼時候要中斷任務。


(補充)Task<TResult> 類別是從 Task 類別衍生而來,兩者主要差異是,前者是帶一個 泛型參數,也表示任務執行完畢要返回的類型值。


     這邊為了簡單講解 Task 類別的用法,為了好示範講解,一樣透過新增一個 Windows Form 專案,在對應的控制箱事件,撰寫核心程式碼….不過在看實際範例程式碼教學時,我先介紹如何三種使用 Task 任務的技巧:

(1)直接使用 Task.Run()的靜態方法,該方法一旦被呼叫,就會馬上進行非同步化任務,而呼叫也會返回一個 Task 實體物件。


(2)新增一個 Task 物件時,傳遞一個委派方法至建構函數,當建立一個 Task 實體物件時,不會馬上執行非同步任務,而是要手動呼叫 Start() 方法,才會開始執行非同步任務。


(3)Task 與 Task<Result> 類別都有公開一個 Factory 靜態屬性,該屬性返回一個 TaskFactory 或 TaskFactory<Result>類別,我們必須再透過 TaskFactory 對應的方法來啟用非同步任務作業。


(實作過程)


步驟 1:

透過 Visual Studio  2017 來建立一個 Windows Form 專案。

2017-07-12_00-33-55


步驟 2:

在 Form1 表單,我設計版面與拖拉相關控制項至主畫面,有 一個 Label (用於顯示標題,Text =“輸入一個正整數值:” ; 兩個 TextBox (分別用於讓使用者輸入 一個正整數、與顯示非同步任務執行完畢時,要顯示的結果值);還有一個 Button 控制項(Text =“開始計算任務” , Name =”btnExecTask”) ; 最後還有一個 ProgressBar , 目的是要 Task 執行非同步作業時,可以及時更新進度,通知目前作業進度表給使用者。


主畫面截圖如下:

11


步驟 3 :

在 Button 按鈕的 click 事件撰寫主要的核心程式碼:

private void btnExecTask_Click(object sender, EventArgs e)
  {
      uint calcNum = 0;


     if (!uint.TryParse(this.txtNumValue.Text, out calcNum))
      {
          MessageBox.Show(“請輸入一個正整數數字!!");
          return;
      }


     //進行更新進度表
      IProgress<int> progress = new Progress<int>((p) => progressBar1.Value = p);


     //宣告一個 Task 類型變數
      Task<long> task = new Task<long>(() =>
      {
          long result = 0L;
          for (int i = 1; i <= calcNum; i++)
          {
              //累加值
              result += i;


             //進度值
              double currProgress = Convert.ToDouble(i) / Convert.ToDouble(calcNum) * 100d;


             //向主執行緒 主畫面 進行更新進度條
              progress.Report(Convert.ToInt32(currProgress));
          }


         return result;
      });


     this.txtResult.Text = “目前正在執行計算過程中……";


     //任務 手動啟動
      task.Start();


     //等待任務執行完畢過程中,將按鈕先停用,以防止重複執行
      this.btnExecTask.Enabled = false;


     while (!task.Wait(100))
      {
          //在等待過程,允許程式繼續處理其他佇列訊息
          Application.DoEvents();
      }


     //任務執行完畢,重新啟用按鈕
      this.btnExecTask.Enabled = true;


     //顯示計算結果
      txtResult.Text = “任務執行完畢,計算結果值為:" + task.Result.ToString();

  }

c


PS.主要程式碼解釋,我都寫在程式碼註解,寫得還滿詳細的….


步驟 4:

執行 compile ,進行測試執行吧…

result





參考文章

C#多工作業與平行處理技術講解

1.透過 Thread 類別撰寫多執行緒多工作業。

2.透過 Delegate 委託支援的方法,撰寫非同步任務。

3-1.透過 Parallel 類別操控多任務平行作業(一)。

3-2. 透過 Parallel 類別操控多任務平行作業(二)。

4.使用 Task 自行控制非同步任務作業。
5.在非同步作業時,如何取消非同步任務。

6.多執行緒多任務存取相同變數,但卻各自隔離保留各自任務的值。

7.非同步存取變數的問題。

8.非同步資源鎖定解決方式。







網智數位-軟體開發(軟件開發)

針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰

業務合作、軟體委外開發

業務窗口:allen@netqna.com

聯繫電話:0920-883-870

公司電話:02-55991310

公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓

skype: netqna

line:netqna

微信:netqna

黃先生 Allen