軟體開發(軟件開發)

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

室內設計、裝潢、窗簾報價估算軟體

網智數位主要提供套裝及客製化的軟體系統解決方案,針對室內設計師、木工、裝潢業產業,量身訂做客製化的軟體,達成客製化、智慧化及網路化的商用軟體。

商用軟體-客製化設計

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

IOT 物聯網-系統開發

根據客戶實際狀況,結合雲端與載具進行客製化物聯網IOT導入與軟體開發

雲端VPS虛擬主機租用

我們的雲端VPS虛擬主機是採用雲端(虛擬化)技術所開發之全新雲端伺服器服務,可以選擇多種作業系統(Windows、Linux等),客戶可載入自訂的應用環境,執行自己所要提供的網路服務,我們的雲端服務可為您的網站提供最完美的解決方案。

ERP軟體客製化導入

ERP軟體客製化導入,室內設計、營造業、裝潢、木作工程、系統櫃工程、會計系統,全面提升公司管理營運效率。

搜尋引擎最佳化SEO

搜尋引擎最佳化(SEO)不僅能提高網站在搜尋結果的排名,更能帶來大量對我們產品或服務真正有需求的訪客。SEO 最棒的特質之一就是不像廣告一樣亂槍打鳥而導致用戶的反感,反而更能提升點閱率跟成交率喔。

服務宗旨

網智數位主要提供套裝及客製化的軟體系統解決方案,專為客戶量身訂做客製化的軟體,達成客製化、智慧化及網路化的管理功能。

我們的成立宗旨就是要以最猛的IT技術讓這個世界更Smart,在我們貫徹我們裡想的同時,我們希望可以把我們所開發的系統帶給台灣的中小企業,除了要推薦好的東西之外,我們也希望做點改變,所以我們的第一目標就是要使用最好用的系統再加上您寶貴的創意,不僅僅可以節省你大量的荷包,還可以有一個像樣的網站。我們可以幫你做的有

企業管理
  • 策略管理
  • 目標管理
  • 行銷管理
  • 財會管理
  • ERP導入
  • 企業流程自訂
資訊管理
  • 網站架設
  • 虛擬化/雲端架設
  • 主機代管
  • 私有雲建制與導入
軟體開發
  • UML設計
  • 版本控管
  • 企業軟體開發
  • APP開發
  • 網頁設計
資訊安全
  • 網頁弱點掃描
  • 主機弱點掃描
  • 木馬檢測
  • 資安鑑識
  • 設計網路架構
  • 資安監控
行銷
  • 關鍵字SEO
  • 社群網路行銷
  • 部落格行銷
  • FaceBook 粉絲團
其他
  • 協助企業申請Google Email
好玩工具開發

講出你的創意吧!沒有甚麼是資訊辦不到的

顯示具有 ASP.NET 標籤的文章。 顯示所有文章
顯示具有 ASP.NET 標籤的文章。 顯示所有文章

2022年7月29日 星期五

感謝-米蔚健康生活全方位,委託我們維護與客製化網站

 感謝-米蔚健康生活全方位,委託我們維護與客製化網站

https://midwayforyou.com/

關於 MIDWAY

身為醫療專業的米蔚
期待醫事人員能以各種形式發揮專業價值
讓大家調整生活的細節即能邁向健康人生

專業 效率 開放 溫暖 創新

正確的專業知識可以有效避免社會成本
整合性的生活調整讓健康不再遙不可及
米蔚秉持著開放、創新的角度
自許成為最貼近你我生活的健康把關者


web



網智數位-開發團隊一直突破開發技術、累積各種產業知識,而且在出版業、室內設計裝潢業、製造業、機電顧問、貿易、地板、窗簾、窗材、拉門、布料業的商業管理軟體投入有特別的領域知識、也在圖控軟體(圖控軟件)、機械手臂、Android APP 、iPhone APP、3D列印 開發一直突破再創新,我們也堅持相信好的軟體可以協助企業,不管在管理營運角度、商品創新、決策分析等都絕對是不可缺少的關鍵因素,如果客戶您有任何軟體開發、程式開發委外需求,請聯繫我們讓我們協助您一起討論如何開發一個好的軟體來協助您。



網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen
my_qrcode_1519621481105

2020年7月1日 星期三

線上電子簽署文件與安全的電子簽名解決方案-客製化專案(軟體開發、軟體設計)

線上電子簽署文件、安全的電子簽名解決方案-客製化專案軟體開發

感謝百拓管理顧問有限公司委託網智數位-軟體開發團隊,開發合約管理系統與電子數位簽核歸檔系統,將傳統保單、資產投資合約傳統紙張簽約方式,全面提升為電子數位簽核,投資客戶與被投資方都可以進行查核投資標的合約內容,雙方經過第三方公認與儲存機制,皆無法任意修改,資料也可以有效保存數位化。


AdobeDocument-Cloud-
圖片來源:Adobe官方,該軟體解決方案與Adobe企業授權整合

Adobe


網智數位-開發團隊一直突破開發技術、累積各種產業知識,而且在窗簾、窗材、拉門、布料業的商業管理軟體投入有特別的領域知識、也在圖控軟體(圖控軟件)、機械手臂、Android APP 、iPhone APP、3D列印 開發一直突破再創新,我們也堅持相信好的軟體可以協助企業,不管在管理營運角度、商品創新、決策分析等都絕對是不可缺少的關鍵因素,如果客戶您有任何軟體開發、程式開發委外需求,請聯繫我們讓我們協助您一起討論如何開發一個好的軟體來協助您。



網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen
my_qrcode_1519621481105

2018年10月8日 星期一

Flir、Fluke 報告輸出軟體-案例分享 - 客製化軟體、軟體開發、軟件開發

        我們累積了多年的軟體開發設計經驗,針對許多產業領域,幾乎都從無到有地,跟客戶需求討論與了解,到開發出客戶需要的軟體,這邊我要分享我們針對機電顧問產業,常需要派出很多工程師前往客戶那邊進行拍照(紅外線熱像儀 Flir / Fluke),拍完照回到公司,要花很多人工作業時間進行貼圖製作、報告內容異常原因判斷、溫度等資訊填寫,花了許多時間才能製作好一個給客戶的報告內容,因此萌生了設計出一套有效率的管理輸出檢驗輸出報告軟體,只要透過軟體系統,指定拍照的資料夾位置,系統可以批次匯入所有照片,並進而歸類整理出客戶、區域、設備位置、盤名名稱、檢測人員、氣溫、濕度、以及根據指定的程式,進行判斷檢測結果,如下圖系統自動產生的報告樣式之一 
螢幕快照 2018-10-08 下午8.28.42 

我們也聆聽客戶使用軟體需求的反饋,因常常要定期送出臺電的制式報告,如高低壓電力設備定期檢測紀錄總表、高壓保護電驛檢測紀錄表、低壓設備檢測紀錄 、高低壓設備熱顯影檢測紀錄 規範報表格式等。


系統軟體都可以直接支援自動匯出符合提供給臺電的報告格式。 
系統-檢測報告輸出選項
螢幕快照 2018-10-08 下午8.35.23 

高低壓設備熱顯影檢測紀錄(八張格式)
螢幕快照 2018-10-08 下午8.37.22 



針對歷年的報告,都可以下條件,搜尋列出
螢幕快照 2018-10-08 下午8.39.25


軟體客製化案例分享-




網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen
my_qrcode_1519621481105

2018年7月25日 星期三

軟體派遣人力、專案軟體開發

軟體派遣人力
網智數位-軟體開發擴大合作團隊,現在可以提供企業人力駐點服務、提供 .Net 和 Java 技術入力駐點服務,我們的人力可以駐點於客戶處,與客戶技術團隊共同進行專案開發,並於專案結束後技術移轉並交接給客戶。       



專案軟體開發
我們更專注于解決客戶的需求,利用專業的資訊IT技能,協助客戶量身定做軟體開發、專案承接。
我們已開發過 圖控軟體、各產業ERP系統、POS系統、Arduino開發、簽核系統、進銷存軟體、電子發票系統、VR軟體。
橫跨產業:窗簾業、拉門、衛浴、地板、貿易業、醫療業、電子業、馬達知名廠商、汽車維修業。


 







網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

my_qrcode_1519621481105

2018年2月25日 星期日

大數據(BigData)與商業智慧(BI)差異性

     目前不管我們是在新聞媒體上、雜誌報導、甚至各產業宣傳上幾乎都會提到大數據(BigDaga),那麼大數據與傳統企業的商業智慧(BI)是否相同、又或者有所差異性呢?




 


  大數據(BigData)與商業智慧(BI)概念區隔性:
傳統的商業智慧BI,主要是應用領域比較局限在企業的數字管理思維層級上,將商業智慧應用在企業內部的ERP系統、MRP系統、POS系統、CRM系統、MES系統所有管理系統的數據整合,提供給中高階主管快速提供,有效明確的數據報表,以利於企業做出明智的企業戰略決策,全面提升管理競爭力。
而近來一直一來的大數據(BigData)題材,是因為在物聯網、雲端化普及成熟下,可以有效的利用各種連網設備工具,進行採集、整理、過濾的資料、數據收集,而這樣的模式,當然更需要新的處理模式與技能,大數據著重於解決某一類問題的方法,例如:大量攝影圖像分析,在網路、傳感器等非結構化海量數據的分析、收集空氣品質數據分析等。

所以不管定義如何差異,大數據(BigData)與傳統商業智慧(BI)是社會發展到不同階段的產物,大數據對於傳統BI,既有繼承,也有發展,從"道"的角度講,BI與大數據區別在於前者更傾向於決策,對事實描述更多是基於群體共性,幫助決策者掌握宏觀統計趨勢,適合經營運營指標支撐類問題,大數據則內涵更廣,傾向於刻畫個體,更多的在於個性化的決策, 當然純粹從思想的角度講,兩者在概念上是可以實現統一的,都遵循數據-資訊-知識-智慧這個脈絡,甚至在更高的層次,兩者也是可以視為雷同的。
  大數據(BigData)與商業智慧(BI)技術差異性:
傳統商業智慧的技術領域:ETL、數據倉庫、OLAP、可視化報表。
大數據的技術領域:Hadoop、MPP、HDFS、MapReduce、資料流處理等。

  企業該關注大數據還是商業智慧?
在技​​術領域,雖然傳統BI的一些技術ETL、數據倉庫、OLAP、可視化報表似乎都將處於落後邊緣,因為它難以解決日后海量數據的處理問題,但是,也不能全盤否定或替代成大數據。一些企業採用SAP HANA,Power BId等工具的都是基於這個問題優化的方案。 BI的那套也將長期存在,畢竟企業對BI方案還是很青睞,大數據的普及和應用也是個漫長的過程。
大數據分析也不是空口說說,它的第一要務就是解決業務問題,大數據一定程度上就是用全新的數據技術手段來拓展和優化業務領域,傳統企業需要聚集一群人來研究這個問題,需要有人專門研究和探索。例如如果對外,想清楚新的商業模式,如果對內,想清楚在哪個場景,可以用大數據的手段提升效率。

當前大數據可以產生價值的地方,從行業的角度看,金融、銀行、互聯網、醫療、科研都有廣闊的前景。從領域的角度看,廣告、市場行銷、保險銀行風險控管、供應鏈都是大數據發揮價值的地方,對於特定企業,比如電信運營商、政府交通管制、空氣監控,大數據也可以在網絡優化、數據分析等方面提供新方法。

(其他參考文章)
MPS主生產計畫專文介紹(一)
MRPⅡ/ERP 能力需求計畫原理
庫存管理-概念與釐清
庫存管理探討-VMI
真正的庫存量形成探討
庫存管理的中樞控管法則(上)
庫存管理的中樞控管法則(下)
庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)
BOM表管理與設定﹣輔料是否需輸入BOM
何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】
ERP 產品成本管理與計算
庫存量正確性衡量法則
粗能力需求計畫(RCCP) - 專文介紹
如何利用軟體來協助企業銷售統計和分析
開發進銷存、ERP、PDM,物料欄位收集與建立重要性(ERP開發、軟體開發、進銷存)
ERP 各種計劃階段的差異
ERP 系統的淺談與優勢
ERP 系統在中小企業如何有效利用條碼與QRCode
[ ERP/MRP 系統 ] - 專案導入深入剖析
ERP 與 CRM 整合對企業的重要性(軟體開發、ERP客製化)
大數據(BigData)與商業智慧(BI)差異性




網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2018年1月15日 星期一

ERP 與 CRM 整合對企業的重要性(軟體開發、ERP客製化)

       現在的企業競爭越來越激烈,更隨著資訊訊息化的普及,所有企業都處身於資訊與大數據分析的必要性,各行各業的企業不得不面對日益增長的海量資訊數據。可是卻又有許多企業無法充分交換、共享、利用各種數據來加以整合,使自身前後兩端成為各自獨立的資訊孤島,最終使企業在業務運營上出現盲點,以至於無法有效利用資訊數據來引導企業做策略分析。




 


       以往舊資訊管理思維,企業傳統的著眼點在後台,也就是在企業內部精益化管理和成本控制這部分,而對前台,也就是直接面對客戶的那一塊缺乏良好的科學管理思維,隨著資訊化、物聯網、雲端技術的普及發展,在以客戶為中心的市場經濟時代,企業關注的焦點逐漸由過去關注產品轉移到關注客戶上來,由於需要將更多的注意力集中到客戶身上,所以僅僅依靠的封閉式管理模式已難以適應激烈的競爭,企業必需同時運用內部流程數據與整合外部客戶的資訊,而為了彌補專注于企業內部ERP系統的不足,順應企業的需求,以方便與客戶的互動,所以企業必需具備在足夠的力量創造有用決策資訊,引進CRM系統,無疑是個捷徑來提升企業管理競爭力。

       所以企業導入 ERP系統 與CRM 系統非常具有天然的互補傾向,ERP系統得以將很多先進的管理思想變成現實中可實施應用的企業資源管理系統,但如果一味固守原有的管理思想,只停留在企業內部流程的管理上,將不能適應新時代資源優化及企業間協同發展的需要;CRM的價值在於突出了客戶服務與支持、和營運管理等方面的重要性,ERP和CRM的系統整合與導入並不是簡單地將二者進行加和,它們是按照業務模式和經營管理思想被合理地整合在一起,最終實現功能上的協同合作,兩者系統整合的基本思想主要是以模塊化趨勢為立足點,將CRM優勢部分有效融入ERP系統,兩者完全可以形成無縫的封閉系統,將企業內外部資源有效的整合起來,為企業發展提供新的機遇。

      把ERP與CRM整合已是大勢所趨。他們的無縫整理與資訊數據分享共用,勢必將帶來 一加一 大於二 的理想效果,企業的過程流線化、行政管理成本削減、更出色的庫存管理、在線定價與報價、交貨週期的自動化、更好的銷售成本控制,最大化地提高企業對市場的快速響應能力和滿足客戶個性化需求的能力,最終以實現為目標,使企業建立起適應網絡經濟的充分柔性的企業管理資訊系統。

 

網智數位-軟體開發,專門針對客戶進行量身設計的客製化軟體,已有多年經驗,也在不同產業領域都有實作成功案例。

(作者其他參考文章)
MPS主生產計畫專文介紹(一)
MRPⅡ/ERP 能力需求計畫原理
庫存管理-概念與釐清
庫存管理探討-VMI
真正的庫存量形成探討
庫存管理的中樞控管法則(上)
庫存管理的中樞控管法則(下)
庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)
BOM表管理與設定﹣輔料是否需輸入BOM
何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】
ERP 產品成本管理與計算
庫存量正確性衡量法則
粗能力需求計畫(RCCP) - 專文介紹
如何利用軟體來協助企業銷售統計和分析
開發進銷存、ERP、PDM,物料欄位收集與建立重要性(ERP開發、軟體開發、進銷存)
ERP 各種計劃階段的差異
ERP 系統的淺談與優勢
ERP 系統在中小企業如何有效利用條碼與QRCode
[ ERP/MRP 系統 ] - 專案導入深入剖析
ERP 導入的投資報酬評估(ERP客製化、進銷存軟體)
ERP 與 CRM 整合對企業的重要性(軟體開發、ERP客製化)
ERP思維突破:啟動企業智能革命,引領未來行銷新浪潮

AI時代的ERP:釋放企業潛能的新革命 



網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen


2017年12月4日 星期一

Java Script D3 資料過濾教學(軟體設計、軟體開發)

       我在網頁繪圖時,現在常使用 D3 來幫客戶做成統計視覺圖表,但一定會遇到客戶要求在使用者界面上可以進行某些條件的過濾篩選,例如根據勾選或者執行某個按鈕(Button)時,可以顯示或隱藏網頁部分元素圖表,而這樣需求條件,我們就可以利用 Java Script D3 支援的 Filter 函數來實作此需求案例。

案例執行畫面如下

2017-12-04_11-11-28

//完整程式碼如下:

<!DOCTYPE html>
< html>
< head>
    <meta charset="utf-8">
    <title>網智數位 Java Script D3 過濾資料技巧</title>
    <link rel="stylesheet" type="text/css" href="styles.css"/>
    <script type="text/javascript" src="d3.js"></script>
< /head>

<body>

<script type="text/javascript">
    var data = [ // <- 程式碼註解 A
        {price: 200, category: "捲簾"},
        {price: 300, category: "直立式軌道"},
        {price: 350, category: "木片百葉窗"},
        {price: 500, category: "木竹簾羅馬"},
        {price: 1000, category: "電動軌道"},
        {price: 800, category: "蜂巢簾"},
        {price: 900, category: "百葉窗"},
        {price: 500, category: "壁紙"},
        {price: 300, category: "耐磨地板"},
        {price: 700, category: "衛浴"},
        {price: 400, category: "馬桶"}
    ];

    function render(data, category) {
        d3.select("body").selectAll("div.h-bar") // <- 程式碼註解 B
                .data(data)
            .enter()
            .append("div")
                .attr("class", "h-bar")
             .append("span");

        d3.select("body").selectAll("div.h-bar") // <- 程式碼註解 C
                .data(data)
            .exit().remove();

        d3.select("body").selectAll("div.h-bar") // <- 程式碼註解 D
                .data(data)
            .attr("class", "h-bar")
            .style("width", function (d) {
                 return (d.price) * 0.6 + "px";}
            )
             .select("span")
                .text(function (d) {
                     return d.category;
                });

        d3.select("body").selectAll("div.h-bar")
                .filter(function (d, i) { // <- 程式碼註解 E
                    return d.category == category;
                })
                .classed("selected", true);
    }

    render(data);

    function select(category) {
        render(data, category);
    }
< /script>

<div class="control-group">
    <button onclick="select('耐磨地板')">
        耐磨地板
    </button>
    <button onclick="select('電動軌道')">
        電動軌道
    </button>
    <button onclick="select('壁紙')">
        壁紙
    </button>
    <button onclick="select()">
        取消選取
    </button>
< /div>

</body>

</html>

重點程式碼講解:

1. 程式碼註解 A ,我在這邊宣告了 一個 data 變數,它存放了一系列 json 格式的物件,該物件 有 2個屬性 分別為 price(記錄價格)、category(記錄類型)。

     var data = [ // <- 程式碼註解 A
        {price: 200, category: "捲簾"},
        {price: 300, category: "直立式軌道"},
        {price: 350, category: "木片百葉窗"},
        {price: 500, category: "木竹簾羅馬"},
        {price: 1000, category: "電動軌道"},
        {price: 800, category: "蜂巢簾"},
        {price: 900, category: "百葉窗"},
         {price: 500, category: "壁紙"},
        {price: 300, category: "耐磨地板"},
         {price: 700, category: "衛浴"},
         {price: 400, category: "馬桶"}
     ];

2.程式碼註解 B,透過 D3 的選取方式

d3.select("body").selectAll("div.h-bar").data(data).enter()

這行程式碼,透將會將 所有數據與 網頁的 <div id=’h-bar’> ,做交集的動作,使得每個數據可以對應各自的 <div id=’h-bar’> 元素。

3.程式碼註解 D,將選取的  <div id=’h-bar’> ,根據 data 的 price 價格 用公式來設定長度,以及透過 text() 來設定文字。

d3.select("body").selectAll("div.h-bar") // <- 程式碼註解 D
                 .data(data)
             .attr("class", "h-bar")
             .style("width", function (d) {
                 return (d.price) * 0.6 + "px";}
             )
            .select("span")
                 .text(function (d) {
                     return d.category;
                 });

4.程式碼註解 E,也是最重要的,我根據 d3 支援的 filter()函數,來過濾要選擇的資料。

d3.select("body").selectAll("div.h-bar")
                 .filter(function (d, i) { // <- 程式碼註解 E
                     return d.category == category;
                 })
                .classed("selected", true);

其他參考文章
HTML CSS 動畫教學–【軟體開發(軟件開發)】
繪圖程式-折線圖、區域圖 實作一
產品報告與能源曲線分析系統
利用 JavaScript D3 在網頁動態產生直條圖(軟體開發、軟件開發)
Java Script D3 資料過濾教學(軟體設計、軟體開發)
利用 JavaScript D3 在網頁動態產生直條圖(軟體開發、軟件開發)


網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:
allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-5599-1310
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2017年7月25日 星期二

(ERP)產品成本計算系統(軟體開發、軟件開發、客製化軟體)

     今年7月份由一家多年在越南設廠的文具用品的台商,委外我量身定做開發屬於他們的ERP系統,該廠商在未委外給我開發軟體時,也在其他知名的套裝軟體有多年的使用經驗,但因為市面上的套裝軟體事實上無法真正的負荷他們的流程以及產品與用料成本計價方式,所以透過 Skype 與我洽談很久(談了2個月),確定我們開發團隊可以了解他們目前工廠遇到的問題就正式放心交個我進行開發設計了。

       不過難度比我想象的還複雜,不是一般BOM表可以用來克服成本計算,所有要分析他們所有會產生成本的各種因素,如材料、人力、耗材、製程,下面系統畫面是一個部分使用者操作畫面,可以用來自動計算單一個產品的所有影響成本的統計計算,未來他們就只要填寫報價單,轉正式訂單,系統就會把複雜的成本計算自動算好,帶入報價與訂單系統。


aaa


一個好的軟體系統,可以有效提升企業與工廠內部管理,讓企業專注於客戶接單、產品研發、而流程整合與數據分析就交給好的軟體系統。


(其他參考文章)
MPS主生產計畫專文介紹(一)
MRPⅡ/ERP 能力需求計畫原理
庫存管理-概念與釐清
庫存管理探討-VMI
真正的庫存量形成探討
庫存管理的中樞控管法則(上)
庫存管理的中樞控管法則(下)
庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)
BOM表管理與設定﹣輔料是否需輸入BOM
何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】
ERP 產品成本管理與計算
庫存量正確性衡量法則
粗能力需求計畫(RCCP) - 專文介紹
如何利用軟體來協助企業銷售統計和分析
開發進銷存、ERP、PDM,物料欄位收集與建立重要性(ERP開發、軟體開發、進銷存)
ERP 各種計劃階段的差異
ERP 系統的淺談與優勢
[ ERP/MRP 系統 ] - 專案導入深入剖析



網智數位-軟體開發(軟件開發) 
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen

2017年7月12日 星期三

使用 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







2017年7月10日 星期一

如何利用管理軟體來協助企業的銷售統計和分析(軟體開發、系統分析、管理軟體、客製化軟體)

     一家公司隨著營運的時間越久,所擁有的客戶資料、訂單資料、出貨資料、銷售成本資料等等,這些有價值的資料訊息,如果會很好地透過資訊系統、管理軟體來加以利用與分析,那麼可以有效協助企業進行更有競爭力的營運面向,而今天所謂銷售統計和分析是指對企業實際銷售的事後歸納與產出建議分析,這樣一來不僅可判別實際工廠生產經營是否已達到預期的目標、或者商品買賣利潤是否最大化,而且我們可以透過資訊管理軟體從中可以發現企業營運流程存在的各種問題,例如,實施的策略是否正確、組織機構是否適應、應變措施是否得當等。





      然而再進行銷售統計分析的依據是具體而準確的每日日常銷售記錄,而好的管理軟體,如 ERP系統就會為各種訂單、出貨記錄資訊進行有效收集和維護,也提供了有力支持。


      銷售的統計分析可以根據需要採用不同的思考方式來進行,例如我舉例我歷年幫客戶比較常進行的分析項目有大致如下:


       ·分類帳目分析:將分類帳目中所列各種銷售費用帳目的數值,如:運輸費用、委外加工費、差旅費、廣告費、郵電費、網路行銷費用、銷售佣金和特殊費用(如接待費等)進行加總統計,計算出各類費用佔總銷售額的百分比,然後進行分析對比,如:各類費用年內變化情況、各類費用比例與以往不同年度對比、各類費用比例與同行業對比、各類費用之間比例關係對比、歷年費用交叉分析比對等等。

·具體銷售功能與成本分析:將分類帳目所列銷售費用帳目按功能分類,然後再予以分析。至於功能如何劃分則常因企業不同而異。

(一)直接銷售費用:如各門市部、維修服務部的辦公費用、銷售人員工資、差旅費、伙食費等。

(二)間接銷售費用:如銷售人員的在職教育培訓費用、管理人員的薪水及市場研究費、銷售統計費等。

(三)其它銷售費用:如廣告費、運輸費、存儲費、分期付款所佔資金的利息等。


    ·市場單位銷售成本分析:將銷售費用按照不同的市場單位進行分析,然後與上述兩類分析進行聯合對比,以分析各類市場對企業經營狀況的影響。市場單位的劃分可採用銷售地區、產品類別、客戶類型、訂貨量的大小等不同方法,要根據需要而定。


      銷售分析必須蒐集各種必要的統計資料。統計報表提供的主要資訊可能包括些許項目:交運資料( 交運地點、日期、交運額)、銷售數量、銷售額、銷售成本、稅務信息,銷售代理商及銷售物料資料等等等。統計的時間範圍一般為 l~5年,可以按年度進行匯總比較,也可以按時段(通常為月度)進行 比較。這是一類時間序列型縱向統計資料,適用於趨勢分析。

統計的口徑根據不同的目標可選用:按客戶分類統計、按銷售代理分類統計、按銷售物料代碼分類統計、按銷售地區代碼分類統計、按市場領域進行分類統計(如行業分類) 以及按交運日期、地點等分類統計。分類統計的目的是為了進行橫向比較分析,以利於進行市場研究決策、制訂銷售戰略。

       銷售統計報表的資料不僅與SD模塊有關,而且還依賴於成本核算中的各種開票接口資訊。因而,銷售統計報表不但反映了實際銷售完成的情況、檢驗計劃的合理性,而且還有利於分析銷售管理的投入產出關係,進行各種策略下的盈虧分析。如:增加廣告宣傳費用對銷售的影響、採用效益掛鉤或數量折扣政策對銷售的影響等。




網智數位-軟體開發,專門針對客戶進行量身設計的客製化軟體,已有多年經驗,也在不同產業領域都有實作成功案例。

(作者其他參考文章)
MPS主生產計畫專文介紹(一)
MRPⅡ/ERP 能力需求計畫原理
庫存管理-概念與釐清
庫存管理探討-VMI
真正的庫存量形成探討
庫存管理的中樞控管法則(上)
庫存管理的中樞控管法則(下)
庫存目標6大範疇(程式開發、程式設計、軟體開發、系統開發)
BOM表管理與設定﹣輔料是否需輸入BOM
何謂 進銷存、ERP、WMS?三者差異性【軟體開發、軟件開發、程式設計】
ERP 產品成本管理與計算
庫存量正確性衡量法則
粗能力需求計畫(RCCP) - 專文介紹
如何利用軟體來協助企業銷售統計和分析
開發進銷存、ERP、PDM,物料欄位收集與建立重要性(ERP開發、軟體開發、進銷存)
ERP 各種計劃階段的差異
ERP 系統的淺談與優勢
ERP 系統在中小企業如何有效利用條碼與QRCode
[ ERP/MRP 系統 ] - 專案導入深入剖析
ERP 導入的投資報酬評估(ERP客製化、進銷存軟體)
ERP 與 CRM 整合對企業的重要性(軟體開發、ERP客製化)
ERP思維突破:啟動企業智能革命,引領未來行銷新浪潮
AI時代的ERP:釋放企業潛能的新革命






網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口:allen@netqna.com
聯繫電話:0920-883-870
公司電話:02-55991310
公司地址(業務營運處):台北市中山區錦州街 25 號 5 樓
skype: netqna
line:netqna
微信:netqna
黃先生 Allen




2017年7月8日 星期六

在.Net 透過 Parallel 類別操控多任務平行作業(二)【軟體開發、軟體設計、系統開發、客製化軟體】

    這篇主要是再次講解 Parallel 類別並行作業的其他支援方法,主要是延續上一篇教學文章 3-1.透過 Parallel 類別操控多任務平行作業(一)。 

    這邊我將透過WPF專案實作一個使用 Parallel.ForEach 方法來支援的循環平行作業任務,它的概念就好比我們常在寫的 for(i=0;i<=10;i++)、或 foreach 迴圈,只是Parallel 類別是充分利用多個處理器、多個核心同時進行作業,執行速度當然效率就快很多。



步驟1:
在 Visual Studio 一樣建立一個WPF 專案

wpf

步驟2:
在 MainWindows.xmal 界面設計成如下結果
parellel

主要是使用了 3個 textbox 控制項,用於讓使用者輸入 資料夾路徑 、想建立的檔案數量、以及每個檔案的大小,再來使用一個 button 按鈕(開始執行 Parallel.Foreach 多任務運算), 來撰寫主要的 並行作業邏輯程式碼。


xaml 程式碼部分畫面
xaml2



步驟3:
在 Button.Click 事件撰寫主要程式碼


程式碼如下:

private void OnClick(object sender, RoutedEventArgs e)
{
    if (string.IsNullOrWhiteSpace(txtDir.Text))
    {
        MessageBox.Show("請輸入目標存放文件的資料夾!!");
        return;
    }


    //如果目標資料夾不存在,就建立一個新的資料夾
    if (!Directory.Exists(txtDir.Text))
    {
        Directory.CreateDirectory(txtDir.Text);
    }


    int fileNum = 0;
    if (!int.TryParse(txtFileNum.Text, out fileNum))
    {
        MessageBox.Show("請輸入檔案的數量!!"); return;
    }


    long fileSize = 0L;
    if (long.TryParse(txtSize.Text, out fileSize) == false)
    {
        MessageBox.Show("請輸入預計每個檔案的大小!!");
        return;
    }


    //記錄要產生新的檔案名稱清單
    List<string> fileNames = new List<string>();


    for (int n = 0; n < fileNum; n++)
    {
        //檔案名稱
        string _filename = "file_" + (n + 1).ToString();


        //資料夾的絕對路徑
        string _dirpath = System.IO.Path.GetFullPath(txtDir.Text);


        //新的檔案的完整路徑
        string fullPath = System.IO.Path.Combine(_dirpath, _filename);


        //加入清單
        fileNames.Add(fullPath);
    }


    txtDisplay.Clear();

    //宣告一個Random 亂書產生器,目的待會用來產生每個檔案的隨機內容
    Random rand = new Random();


    //宣告一個 Action 委派任務,來產生每個檔案與檔案內容
    Action<string> act = (file) =>
        {
            FileInfo fileInfo = new FileInfo(file);


            //如果文件已經存在,就把它刪除
            if (fileInfo.Exists)
                fileInfo.Delete();


            //開始進行隨機寫入內容
            byte[] buffer = new byte[fileSize];
            rand.NextBytes(buffer);


            using (FileStream fs = fileInfo.Create())
            {
                 BinaryWriter sw = new BinaryWriter(fs);
                 sw.Write(buffer);
                sw.Close();
                sw.Dispose();
            }


            //顯示執行結果
            string msg = string.Format("檔案{0}已經建立完成!!\n", fileInfo.Name);
             this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => txtDisplay.AppendText(msg)));


        };

    //開始進行 Parallel 的循環平行任務作業
    Parallel.ForEach<string>(fileNames, act);


}




重點程式碼講解:
1.使用 Random rand = new Random();  ,來隨機產生每個檔案的內容。
2.宣告一個 Action 委派任務,來產生每個檔案與檔案內容。
Action<string> act = (file) =>
    {
        FileInfo fileInfo = new FileInfo(file);


        //如果文件已經存在,就把它刪除
        if (fileInfo.Exists)
            fileInfo.Delete();


        //開始進行隨機寫入內容
        byte[] buffer = new byte[fileSize];
        rand.NextBytes(buffer);


        using (FileStream fs = fileInfo.Create())
        {
            BinaryWriter sw = new BinaryWriter(fs);
            sw.Write(buffer);
            sw.Close();
            sw.Dispose();
        }


        //顯示執行結果
        string msg = string.Format("檔案{0}已經建立完成!!\n", fileInfo.Name);
        this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => txtDisplay.AppendText(msg)));


    };

3.使用 Parallel.ForEach<string> 來開始進行 Parallel 的循環平行任務作業。



參考文章
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

在.Net 透過 Parallel 類別操控多任務平行作業(一)【軟體開發、軟體設計、系統開發、客製化軟體】

   此篇文章主要是延續之前的文章 【C#多工作業與平行處理技術講解】,講解與實作如何在利用強大的 透過 Parallel 類別支援的方法,撰寫非同步任務,這裡一樣我會透過簡單程式碼進行實作教學。


   在並行任務與建立一個新的執行緒過程來執行一個非同步作業的操作是非常相似地,但是在這邊的並行任務卻是可以更好地發揮多個CPU處理器或者多核心處理器的強大優勢,進而充分地利用CPU的可用資源來執行非同步作業任務,更方便地是,在 .Net 並行任務的操作過程被封裝地很好,身為程式開發人員只需要調用呼叫對應的類別與相關成員方法就可以很輕鬆地建立與執行並行任務了,至於任務是在那個CPU處理器執行,操作系統的底層會自動進行調用配置。


    在這邊我使用一個 WPF 的專案範例進行講解,來說明如何利用 .Net 的 Parallel 類別執行非同步作業。


步驟一 :
在 Visual Studio 2017 建立一個 WPF 專案,
wpf



步驟二:
在 主要的 MainWindow.xaml 畫面,用xaml 語法宣告了一下界面結果


2017-07-08_17-12-48


主要是有 提供 3 個讓使用者輸入整數值的 TextBox , 以及對應 3 個顯示執行結果的 TextBlock ,還有一個 Button (執行 Parallel 運算平行任務)的按鈕。


部分xaml 語法如下:
xaml


步驟三:
在 Button 的 Clieck 事件,進行撰寫主要的核心程式碼邏輯….
(Code)
private void OnClick(object sender, RoutedEventArgs e)
{
    int num1 = default(int);
    if (!int.TryParse(txtInput1.Text, out num1))
    {
        MessageBox.Show("輸入第一個正整數值:");
        return;
    }
    int num2 = default(int);
    if (!int.TryParse(txtInput2.Text, out num2))
    {
        MessageBox.Show("輸入第二個正整數值:");
        return;
    }
    int num3 = default(int);
    if (!int.TryParse(txtInput3.Text, out num3))
    {
        MessageBox.Show("輸入第三個正整數值:");
        return;
     }


    //宣告第一個並行作業的委派實體
    Action act1 = () =>
        {
             int sum = 0;
            for (int x = 1; x <= num1; x++)
            {
                sum += x;
            }


            //顯示執行結果
            this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run1.Text = sum.ToString()));
        };


    //宣告第二個並行作業的委派實體
    Action act2 = () =>
    {
        int sum = 0;
        for (int x = 1; x <= num2; x++)
        {
            sum += x;
        }


        //顯示執行結果
        this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run2.Text = sum.ToString()));
     };


    //宣告第三個並行作業的委派實體
    Action act3 = () =>
    {
         int sum = 0;
        for (int x = 1; x <= num3; x++)
        {
            sum += x;
        }


        //顯示執行結果
        this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => run3.Text = sum.ToString()));
    };



    //使用 Parallel 類別來執行 並行任務
    Parallel.Invoke(act1, act2, act3);


}



程式碼重點講解:
1.這邊我主要用了 3 個 Action 的委派實體,分別用來進行整數的累加運算任務。
2.使用了 Dispatcher.BeginInvoke() 方法,和Windows Form 專案一樣,WPF 在平行作業模式下,也分為主UI的主執行緒,和多個任務的各別執行緒,而在任務的執行緒要改變主執行緒控管的主畫面下,必須透過 Dispatcher.BeginInvoke ,在不會發生一個 UnauthorizedAccessException 例外錯誤。
3.也是最重要的程式碼邏輯,利用 Parallel類別的 Invoke 方法呼叫,分別傳入多個委派實體,在這邊我宣告了3個 Action 委派實體,我一次傳入 Parallel.Invoke(act1,act2,act3), 這樣程式就自動進行3個平行作業任務了。





參考文章
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

2017年7月6日 星期四

透過 Delegate 委託支援的方法,撰寫非同步任務(軟體開發、客製化軟體、系統設計)

      此篇文章主要是延續之前的文章 【C#多工作業與平行處理技術講解】,講解與實作如何在利用強大的 透過 Delegate 委託支援的方法,撰寫非同步任務,這裡一樣我會透過簡單程式碼進行實作教學。

       在.Net 平台的委派類型(Delegate)自身就可以很容易地使用非同步作業,因為只要是委派(Delegate)類型都一點有 BeginInvoke 以及對應的 EndInvoke() 這 2 個非同步操作方法,所以我們就可以非常容易地透過 委派實體 直接 使用非同步任務。
      在這邊我一樣使用 Windows Form 來做示範(因為比較單純可以講解程式技巧,所以不要問我為何不用 ASP.NET MVC),整個實作範例畫面為如下圖:


繪圖



步驟1 :
在 Visual Studio 新增一個 Windows Form 專案,我們準備拖拉幾個控制箱來達成 主要結果畫面,分別有
Label 控制箱 (Text = 基數)、Button 按鈕控制箱(Text = 進行計算作業 , Name = btnDelegateInvoke)、ProgressBar控制箱(用於顯示非同步作業的進度)、TextBox 文字方塊(Name = txtResult , 用於顯示執行計算結果)。


步驟 2:
在 Button 控制箱 (name = btnDelegateInvoke)的 Click 事件,撰寫主要核心代碼:
private void btnDelegateInvoke_Click(object sender, EventArgs e)
{
    int baseNum = default(int);
    if (!int.TryParse(txtBaseNum.Text, out baseNum))
    {
        MessageBox.Show("請輸入一個正整數哦!");
        return;
    }


    txtResult.Clear();

    // 顯示進度表的狀態
    IProgress<int> progressReporter = new Progress<int>((p) =>
    {
        this.progressBar1.Value = p;
    });


    //  計算階乘的委派實體
    Func<int, BigInteger> ComputeNumValueAction = (bsNum) =>
        {
            BigInteger bi = new BigInteger(1);
            for (int i = 1; i <= bsNum; i++)
            {
                bi *= i; //相乘
                // 用於計算目前進度
                double ps = Convert.ToDouble(i) / Convert.ToDouble(bsNum) * 100d;
                progressReporter.Report(Convert.ToInt32(ps));
            }
            return bi;
        };


    // 開始呼叫使用
    btnDelegateInvoke.Enabled = false;
    ComputeNumValueAction.BeginInvoke(baseNum, new AsyncCallback(FinishedCallback), ComputeNumValueAction);


}



2017-07-06_01-01-56



程式碼邏輯講解:
1.在 Progress<T> 是實現 IProgress<T> 介面,所以這裡可以透過它支援的 Report()方法來報告目前非同步的操作進度數據,該對象在進度更新後,是允許使用者直接繼續操作主畫面的,例如拖拉。

2.Func<int,BigInteger> 委派,代表自身帶有一個 int 類型的參數,而返回的值類型為 BigInteger,這邊我特別用 BigInteger 類型,因為在計算階乘的計算結果,可能數字會非常大,會超出 long 類型的最大值。

3.在開始進行使用 委派(Delegate)支援的BeginInvoke方法時,必須再使用一個 AsyncCallback 委派,該委派主要是用於綁定一個方法,在檔非同步任務完成時,可以呼叫的回調方法,並且再回調方法中,再次調用 Delegate.EndInvoke方法來捕捉計算結果。

我們直接看 AsyncCallback 綁定的 FinishedCallback 方法。

private void FinishedCallback(IAsyncResult ar)
{
     // 取出委派變數
    Func<int, BigInteger> action = (Func<int, BigInteger>)ar.AsyncState;
    // 求得計算結果
    BigInteger res = action.EndInvoke(ar);
    this.BeginInvoke(new Action(() =>
     {
        btnDelegateInvoke.Enabled = true;
        // 顯示計算結果
        txtResult.Text = string.Format("計算結果:{0}", res);
     }));
}


ddd



上述程式碼撰寫完畢後,就可以編譯執行,在 基數欄位輸入一個正整數,就可以進行非同步的計算階乘作業。



參考文章
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