軟體開發(軟件開發)

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

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

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

商用軟體-客製化設計

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

IOT 物聯網-系統開發

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

雲端VPS虛擬主機租用

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

ERP軟體客製化導入

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

搜尋引擎最佳化SEO

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

服務宗旨

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

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

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

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

顯示具有 進銷存 標籤的文章。 顯示所有文章
顯示具有 進銷存 標籤的文章。 顯示所有文章

2018年5月30日 星期三

KM知識管理系統-軟體開發、客製化軟體

     網智數位﹣軟體開發團隊,今年協助台灣最大的馬達承軸器廠商,今天台灣、上海同步進行展示發表,開發智慧型的維修知識管理系統,只要輸入各種設備故障原因,系統自動會導引故障的排除方式、以及需要的檢測項目、各種歷年來的統計數據報告,協助企業員工多年來的經驗與知識透過資訊科技軟體進行傳遞,創新引導員工處理維修問題,也從隱形的知識資產變成可見的有形資產,再度證明資訊科技可以有效提升企業的無形競爭力...

WechatIMG2

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

my_qrcode_1519621481105

2018年5月15日 星期二

室內設計、木工裝修-報價管理與收款系統(軟體設計、軟體開發)

   感謝在新竹經營多年的知名室內設計裝修工程的曉偉師傅團隊,委託網智數位-軟體開發團隊,開發該產業的專屬估價與收款管理系統。








   我們已經累計了窗簾、窗材、地板、衛浴設備、廚衛、淋浴拉門、磁磚等,各自該領域的領導廠商、大盤商、製造商、工廠,來建置符合客戶特殊工作流程的管理系統,我們都可以針對不同預算來量身開發一個軟體,更可以協助客戶一步一步從沒有資訊化的管理,建置一個提升競爭力的輔助管理系統。







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

2018年4月20日 星期五

ERP 導入的投資報酬評估(ERP客製化、進銷存軟體)

      今天下午Allen我跑到新店拜訪一個從事30幾年的服裝製衣廠,該客戶使用某國內的知名套裝軟體多年,但客戶在需求討論一直說庫存不準確、生產工序流程無法符合該公司的營運管理面,所以他們使用管理系統跑出了的財務報表、生產報表等等,事實上大家都知道無法信賴,甚至客戶提出一個明顯例子,就是現有套裝軟體跑出的產品生產成本過度高估,導致於他們業務進行報價時,產生價格嚴重高估,跟其他競爭廠商產生巨大落差,而報價完全失去競爭力,因而損失了龐大的訂單,故內部一直有個聲音,想要找量身定做的ERP客製化軟體,所以找上我。





















      不是這套知名的套裝軟體不好,事實上我一直也很欣賞這國內的套裝軟體,但畢竟套裝軟體就是大眾市場所推出的管理系統,不可能可以根據某產業、甚至某特定公司進行修改流程、表單欄位,套裝軟體事實上它適合初期創業得中小型企業、店面,快速導入資訊化系統,好處就是非常便宜,不需要再等待程式研發過程,就可以有現成的軟體可以用,但一切的開始到最後就是您必須去完全適應遷就軟體功能與流程,而公司經營一段時間後,漸漸有了自己的企業文化、流程、獨特優勢、管理流程,就會發現跟套裝軟體格格不入越來越明顯,內部就會產生我們需要一個屬於自己量身定做的ERP系統。

       在導入一個新的軟體管理系統(進銷存、ERP、CRM、SCM等等),事實上是需要耐心與時間的,因為管理系統是需要深入客戶的流程、管理思維,而不斷的討論再討論,所以需要雙方(企業使用端與軟體開發商)都需付出極大的腦力、時間、體力與耐心,創造出一個對客戶有用的管理系統。
        但評估導入一個全新的軟體系統時,事實上需要時間、人力、預算,那麼這邊我也簡單描述,導入管理系統的效益評估成敗問題,在做不做投資效益分析問題上業界有很不同的看法,有人認為ERP項目主要追求的是長期效益,為企業奠定一個競爭優勢的基礎,不能要求立竿見影,當然也有人認為投資回報很難計算出來,不能用投資回報來考核ERP的成敗。
         

        效益是在深化應用中逐漸體現出來的,“上線”時還見不到效益的情況確實存在。很多項目可能要等若干年後才能收回投資,因此投資回收期會有長短,無非是收益多少和回收期長短的問題。任何一項投資項目必須做可行性研究,而投資效益分析是可行性研究報告的重要內容之一,是立項決策前必須做的一項不可缺少的重要工作,如果投資長期見不到效益,誰也不會做這種打水漂式的賠本買賣。
         投資效益分析首先要確定投入的資金數額,在資金投入方面,通常要考慮以下各項,但不一定每個ERP項目都樣樣需要,要根據企業的具體情況。為了避免疏漏,這裡列舉了所有可能的支出,供參考。
        *調查問卷、接待、差旅費用;
        *諮詢、教育訓練等售前服務費用;
        (以上兩項應列入ERP項目開支,不要分攤到行政辦公費用中。)
        *ERP產品費用(軟體使用許可費、資料費、雲端的租賃費用);
        *電腦、終端機、印表機、伺服器、各種網路通訊設施、條碼成套設施、數據採集器等各種硬體費用;
        *新建機房、添加的辦公費(如電腦桌椅、文件櫃)的費用;
        *導入顧問、售後服務費用;
        *監理服務費用;
        *二次開發和使用者授權費用
        *日常維護費用(耗材、網路通訊費用、工資等);
        *升級費用及每年需支付的相關費用(ERP產品公司有相應的規定)
        *在線服務費用;
        (以上是比較不容易忽略的支出)
        *延誤資訊化應用造成的損失(也就是推遲獲益的損失,如何計入資金投入比較難估算,要和收益結合起來研究) 


         這裡,我們也不妨引入總體擁有成本的概念,就是把系統生命週期的一切費用,包括選型、安裝、應用、維護和管理都考慮進去,而不僅僅考慮初次投資。



(其他參考文章)
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客製化)


網智數位-軟體開發(軟件開發)
針對各特殊產業都可以量身定做符合貴公司的需求,別人無法克服的就是我們的挑戰
業務合作、軟體委外開發
業務窗口: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年9月5日 星期二

在非同步作業時,如何取消非同步任務(軟體開發、程式設計、軟件開發)

      在之前我寫過一篇關於用 Task 類別來撰寫非同步化作業(使用 Task 自行控制非同步任務作業),來利用多CPU、多核心處理器的優勢,這樣可以避免某些邏輯需要較長的時間去執行,而造成主界面程式停頓卡卡,讓使用者誤以為當機、或程式有問題,所以透過.Net 的 Task 任務,可以讓系統自行的調度限制可以用的執行緒(Thread)。

   既然有了 Task 任務類別的支援,可以讓我們輕易的撰寫多工、非同步作業的程式,讓長時間執行的程式透過另外一個執行緒(Thread)在背後執行,例如我常幫工廠或企業寫物料需求計算(MRP、MPS計算)、業績獎金計算、APS先進排程規劃,這些都是需要執行讀取大量的系統資料來進行運算,這就可以充分利用 ThradTask的技術再背後另外一個執行緒去執行,使用者,在前端主畫面還可以繼續執行其他作業,而不用只能等待程式執行完畢。
    不過我們也常常遇到常時間執行的程式,我們可以提供一個按鈕讓使用者去選擇【取消】背後執行的任務,那麼這篇技術文章我就是想講解,如何在.Net 平台取消非同步化作業的任務 ,.net 平台裡有個類別專門跟 Task 、Task<TResult> 類別搭配使用,使得完成取消非同步任務作業的執行,這個類別就是 CancellationTokenSource 類別

我在這邊一樣透過 Step By Step 來建立一個範例程式,來說明整個程式的撰寫技巧…


1.這邊我簡單為了好示範,我建立一個 Windows Form 視窗專案,命名為 CancellationTokenSource_Demo,如下圖:

繪圖

2.在 Form1 表單,我設計了一下畫面
繪圖2
在Form1表單,我為了示範,所以放置了2個 Label (分別顯示 輸入一個正整數、運算結果顯示),2個 Button 按鈕(分別為 進行運算、取消非同步任務),還有一個 ProgressBar (作用於非同步任務執行時,可以顯示進度條狀態)。

3.在 Form1.cs 的後端程式,是最重要的,我把程式標註註解,這樣大家就可以容易理解了。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }


    /// <summary>
    /// 宣告一個 用於支援取消非同步任務的變數
    /// </summary>
    private CancellationTokenSource cts = null;


    private void btnCalc_Click(object sender, EventArgs e)
    {
        //取得的正整數
        int currNum = 0;
        if (!int.TryParse(txtInputInt.Text, out currNum))
        {
            MessageBox.Show("必須輸入一個正整數數字!");
            return;
        }


        //清楚執行結果
        txtFinalResult.Clear();


        btnStartCalc.Enabled = false; //將【進行運算】按鈕啟用狀態取消
        btnCancel.Enabled = true; //將【取消非同步任務】按鈕啟用狀態啟用


        //用於顯示報告進度條的變數
        IProgress<int> progRpt = new Progress<int>((p) =>
        {
            this.progressBar1.Value = p;
        });


        //如果 CancellationTokenSource 物件變數不是為 null , 比較進行釋放(務必)
        if (cts != null)
         {
            cts.Dispose();
        }


        //實體化 CancellationTokenSource 物件
        cts = new CancellationTokenSource();


        //宣告一個任務變數
        Task<string> task = new Task<string>(() =>
        {
            BigInteger bint = new BigInteger(1d);
            double totalProgress = (double)currNum;


            //如果CancellationTokenSource 物件的 IsCancellationRequested 值為 true ,代表使用者已經將非同步任務進行取消
            for (int i = 1; i <= currNum && !cts.IsCancellationRequested; i++)
            {
                 bint *= i; //相乘
                double progressVal = Convert.ToDouble(i) / totalProgress * 100d;


                //顯示非同步任務執行的進度表
                progRpt.Report(Convert.ToInt32(progressVal));
            }


            //傳回執行結果
            return bint.ToString();


        }, cts.Token, TaskCreationOptions.LongRunning);

        //開始執行非同步任務
        task.Start();


        //等待任務操作完成,等待1秒
        while (!task.Wait(1000))
        {
            Application.DoEvents();
        }


        //顯示運算結果
        txtFinalResult.Text = task.Result;
        btnStartCalc.Enabled = true;
        btnCancel.Enabled = false;
    }


    private void btnCancel_Click(object sender, EventArgs e)
    {
         //使用者執行取消非同步任務
        if (cts != null)
        {
             cts.Cancel();
        }
    }
}


1
2
3

4

4.經過步驟3核心程式碼後,就可以編譯執行,執行結果畫面如下:
4-1.
執行運算中…
r1

4-2.
中途,我執行【取消非同步任務】按鈕
r2
完成上述這樣的示範,就可以撰寫讓使用者中途取消任務的執行。


參考文章
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年9月1日 星期五

開發進銷存、ERP、PDM,物料欄位收集與建立重要性(ERP開發、軟體開發、進銷存)

     品名(物料、零件、產品)在進銷存、MRP、ERP開發時,我們通常可以用一個品名基本檔進行記錄歸檔,品名這個詞包含很多的性質(欄位),在開發商用軟體時,品名基本檔欄位的收集與建立重要性絕對是一個基本關鍵。






  品名或稱物料這個詞包含很多的性質。我們平常所感受到它的物理屬性、自然屬性,但今天我在這邊想要特別談的是它的管理欄位開立的重要性。因為物料除了包含有形的實體外,其實還可以包括服務等無形的東西。在大型管理軟體中(例如 SAP),與物料相關的東西,除了它的大小、形狀、重量等等之外,還包括了它的價格、它的儲位、它的供應商等,這些都是它的管理屬性(欄位)。這些屬性關聯到我們如何有效地去管理它的採購、它的儲存、它的銷售,也作為商業報表分析的欄位基準。

    所以一般來說,幾乎大型ERP管理軟體對於物料(品名)這樣一個小元素就預留有幾乎近數百個控制項,這樣才可以讓我們窺見這些ERP管理軟體嚴密的錯綜複雜的管理邏輯。

 
而我們可以從四個方面來分解品名物料的管理屬性(欄位):
 
基本屬性
 
物料的基本屬性用於描述物料的設計特徵,這些屬性主要包括物料編碼、物料名稱、物料類型編碼、物料類型名稱、設計圖號、設計版次、生效日期、失效日期、品種規格(牌號、技術規格、技術條件和技術狀態)、預設的計量單位、單位重量、重量單位、單位體積和體積單位、尺寸單位等。
 
物料編碼和物料名稱都是物料的標識,物料編碼用於唯一標識物料,而物料名稱用於物料的輔助識別。物料類型編碼和物料類型名稱主要用於物料的統計分析。品種規格屬性描述物料的品牌、規格等資訊。
 
庫存與採購屬性
 
物料的採購和庫存屬性主要描述與採購、庫存管理有關的訊息,這些屬性包括物料製購類型、預設儲存倉庫、預設庫位、物料條碼、是否可用、ABC碼、盤點方式、循環盤點編碼、盤點週期、盤點日期、是否批次管理、批次號、批次有效天數、批次檢測週期、最新入庫日期、最新入庫量、最後出庫日期、最新出庫量、最新檢測日期、最新檢測結果、是否單件管理、是否限額領料、是否允許超採購訂單入庫、現有庫存量、最大庫存量、安全庫存量、物料平均日耗量、庫存金額、是否進價控制、物料計劃單價、進價上限率、預設供應商和在供應商使用的編碼等。
 
任何一家企業可以根據自身特點和條件來對物料的這一屬性進行管控。比如,物料製購類型包括自製件和採購件;企業可以有多個性質不同的倉庫,以便儲存來自不同的物料;如果公司物料管理方面採用了條碼管理,那麼,可以在物料條碼屬性中儲存該物料的條碼數據。條碼是否與物料編碼相同或關聯,也由公司的編碼規則確定。
 
再來談到庫存,還有一項不可分割的活動就是庫存盤點。庫存盤點是對每一種庫存物料進行清點數量、檢查質量和登記盤點表,且對盤盈盤虧數量進行物料帳面調整、達到物料帳物相符目標的管理過程。批次管理也是生產管理的一種重要手段。當某個物料有儲存有效期限制時,或需要對該物料的每一批物料進行跟踪控制時,可以採用批次管理功能。
 
計劃類屬性
 
物料的計劃類屬性主要描述與生產計劃管理相關的資訊,這些資訊包括確定物料需求的方式和物料需求的各種週期量的數據。例如,是否獨立需求、補貨政策、補貨週期、訂貨點、訂貨批量、採購或加工提前期、生產已分配量、銷售已分配量、不可用量、庫存可用量、批量政策、批量週期、預設工藝路線編碼、預設工藝路線名稱、是否可以替換、可替換物料編碼以及是否虛擬件等。
 
銷售類屬性
 
物料的銷售類屬性主要描述與物料銷售有關的資訊,包括銷售價格、銷售人員和銷售類型等內容。例如,銷售計劃價格、計價貨幣、折扣率、是否售價控制、銷價下限率、銷售成本科目、佣金、銷售人員編碼、預設的客戶編碼以及物料在買方使用的編碼等。
 
以上僅僅是從一個物料,我們就已經剖析出近百個管理屬性。由此可見一個複雜的ERP管理軟體是有著多麼錯綜複雜的管理網狀結構。 ERP的管理對象的複雜性,需求的多變性決定了我們不可能像引進機器一樣引進ERP,引進ERP的管理思想。它必須立足企業,融入企業自身的管理特徵與管理條件才能發揮作用,也才可以真正落實數據化流程管理。


 
        而我在多年協助企業導入與量身定做開發ERP管理軟體時,很多企業在考慮實施導入的時候,往往只注重到了他們現有看的到、感覺的欄位屬性,但無論是何種生產類型生產什麼產品,無論企業的規模大小,他們都是根據客戶的需求確定什麼時候生產什麼產品生產多少數量,從而確定什麼時間採購和生產什麼物料,採購和生產多少數量。他們要對供應鏈上的物流、資訊流、資金流進行優化控制和管理,使資源利用最大化。他們都追求共同的目標:最大限度的縮短產品的生產週期和採購提前期,最大限度的降低庫存資金佔用,降低生產成本,準時交貨,提高生產能力,快速響客戶的需求。



      但是決定ERP能否真正能給企業帶來經濟效益的,決定ERP實施成敗的關鍵因素,必須好好討論物料品名欄位它必須開立的欄位清單,而製造業隨著他們的生產組織、生產批量、生產產品的不同,其管理需求是不盡相同的。一般ERP軟體產品將製造業企業分為離散製造業和流程工業兩類。又將離散製造分為單件生產、多品種小批量生產、大批量流水生產和大規模定制等四種類型,以及上述類型的混合製造模式。根據客戶定單介入生產過程的不同又分為按庫存生產、按定單裝配、按定單生產和按定單設計的管理模式。比較全面的ERP產品他們通過不同功能的配置可以滿足上述不同需求。但一個ERP產品要想把上述各種各樣的需求都包含在產品裡,那麼這個產品就是一個怪物,譬如我們還是以物料的屬性為例,有些物料的屬性是可以窮舉的,譬如成衣生產的規格;而有一些屬性是無法窮舉的,譬如布匹染廠的,布匹顏色、尺寸大小。所以,ERP產品有強烈的專業性,而對這一點認識和客戶化處理決定企業ERP實施的成敗,所以要導入一個好的成功地ERP管理軟體,必須和企業流程、企業產業特性進行徹底地了解與討論,整理出目前與未來要分析管理的品名欄位,才是一個導入與開發ERP的起始點。




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

(作者其他參考文章)
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:釋放企業潛能的新革命


網智數位-開發團隊

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



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





2017年8月31日 星期四

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

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




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


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



(其他參考文章)
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月17日 星期一

企業數位化轉型所依賴的物聯網平台(軟體開發、軟件開發、物聯網開發、智能設備)

     今天我們都知道物聯網在任何化規模企業的轉型中扮演著重要角色,但如果可以透過實行適當的整合現有的物聯網平台資源,那麼就可以在既有的設備資產和IT基礎設施之間充當一座重要的橋樑,例如一家企業可以充分地利用物聯網來改善供應鏈管理和物料資源規劃(MRP)的效率、甚至SCM(供應鏈管理)、上下游資訊系統、訊息傳遞的整合。






     導入與建置企業一個好的物聯網平台,我們必須好好的從頭規劃、重新深思,如何與現有的企業資源規劃(ERP)、MRP(物料需求計劃)、甚至是已有的商業智慧(BI)等系統統統整合起來,才能真正地有效為制定決策的高階主管來提供最有用的洞察力、戰略儀表板,再來用來實施物聯網戰略與部署一個全面的企業應用軟體整合(EAI)專案是一樣複雜與困難地。

      因為由於企業的物聯網現在都備受關注,眾多平台廠商與系統資訊整合廠商正在大力投資於端到端(P to P)解決方案,而這些平台可幫助企業組織連接設備、採集數據、分析趨勢和管理資產。
下面是你可以考慮為物聯網戰略採用的幾個主要平台。


微軟(Microsoft)
微軟是少數幾家提供一整套物聯網解決方案的公司之一。 Windows 10物聯網版本可以安裝到資源有限的設備上。運行Windows 10或其他任何操作系統的這些設備很容易連接到Azure物聯網平台。微軟構建了核心服務,可為物聯網提供必要的功能。連接到物聯網Hub的設備可以通過事件Hub攝取數據。 Stream Analytics和HD Insight為傳感器數據提供了大數據和分析功能。 Azure機器學習很容易整合起來,以便對數據流執行預測分析。 Power BI用於儀表板和可視化。微軟還構建了Azure物聯網套件這款客戶可以部署的交鑰匙解決方案。

在此我也要特別強調,近年來網智數位陸續透過微軟的技術與平台,幫台灣的許多行業的領域廠商如工業馬達製造業、工業風扇設備大廠透過微軟平台建置可以同時管理數萬台風扇、建立數位儀錶板、也踏入越南廠商的合作建置 Power BI 的可視化即時圖表軟體。


IBM
企業物聯網可謂是IBM Watson平台的基石。 IBM是這個市場的早期先行者之一,它將機器學習和認知計算的威力引入到物聯網。 Watson物聯網與Bluemix緊密整合,擁有一整套廣泛的功能。開發人員可以使用SDK和API,自動將設備導入到平台上。 IBM注重區塊鏈,還將幫助客戶將物聯網與基於HyperLedger的新興分佈式賬本技術集成起來。由於最近投入30億美元,IBM對物聯網、認知技術和機器學習寄予厚望。客戶可以訂購基於雲的物聯網服務,也可以在本地部署平台。


亞馬遜(Amazon)
在過去的十年間,亞馬遜網絡服務(AWS)已添加了基礎設施的關鍵構建模塊,包括計算、存儲和數據庫。由於IaaS達到了穩定狀態,AWS於是調整重心,致力於提供充分利用底層構建模塊服務的平台服務。 2014年,亞馬遜收購了2lemetry,這家物聯網初創公司的業務主攻M2M,後來成為了AWS物聯網服務。 AWS物聯網平台充分利用現有的雲服務來提供高級功能。從設備管理到虛擬化,AWS擁有企業需要的一切服務。其服務包括AWS Lambda、亞馬遜EMR、亞馬遜DynamoDB、亞馬遜Redshift、亞馬遜Kinesis以及最近發布的亞馬遜QuickSight,可以處理數據攝取、存儲、處理和可視化。 AWS的現有客戶很容易將物聯網與其云解決方案整合起來。


思科(Cisco)

思科將整個公司押寶於企業物聯網上。由於在數據中心領域有相當大的實力,思科旨在成為物聯網邊緣設備的首選廠商。思科在大力推行其霧計算(Fog Computing)項目,利用其在企業數據中心的傳統強項發力。該公司針對企業物聯網場景優化網絡設備。思科收購Jasper幫助這家公司向電信公司交付一款白標物聯網平台。該平台非常適合跟踪連接至蜂窩網絡的基於SIM的設備。該公司還與英特爾和微軟結為合作夥伴,大力推動邊緣分析方面的創新。


平台技術來源整理
reference:Building a Real-Time Device Management System  & Can Alhas


(其他參考文章)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月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