變成全部都要改寫的樣子
要做跟不做......
如果切得不好,變成動畫跑不出來
(另一個 thread 主要工作要跑的夠久)
'要注意某些控件必須關閉功能
讓他不能做其他事.....那不是乾脆不要弄多執行緒
要再想想~
==========================================
測試 EXCEL 轉檔
目前會發生說多執行緒同時跑,
有機會碰到檔案名稱相同
變成多個執行緒有機會叫用同一個檔案名稱
什麼時候去判斷同檔名
發現說,有些Thread在判斷有沒有相同黨名的時候
會跟要殺TXT檔案的時候,兩個鄉衝
除非一開始就配好不重複的黨名
不然就是說確定所有執行緒跑完
一次全部殺掉
但是怎麼確定
用VB.NET實現多執行緒
http://www.asp.com.tw/news/knowledge/1/info_tc1.htm
'以要執行函數的位址為參數建立WaitCallback物件
callBack = New WaitCallback(AddressOf Dog(I).Bark)
'在QueueUserWorkItem時, 還可傳入一個Object作為呼叫該函數的參數
'當然, 透過類別的Property也是另一種指定參數的作法, 而且更有彈性
ThreadPool.QueueUserWorkItem(callBack, I)
'多工轉檔,目前做法會忽略異常資訊
只單純做轉檔部分
或是說需要另外紀錄在最後show出來之類的
要再想想看
'合併計算,可能要分兩部分走,
合併走共享資源變數,批次走區域變數
確定所有執行緒走完以後
回主執行緒做distinct, sum, order by 動作
有點麻煩,再看看好了
==========================================
測試 CR報表
目前卡在 開啟瀏覽報表 會提示要求輸入登入資料庫帳密 (之前沒有)
報表 DataSource 是一個 DataTable,應該是不會要求登入資料庫才對啊
@大概知道是因為他找不到登入資料庫的 DataSet
所以在報表上面重新設定好之前訂好的DataSet就可以了
再來就是多執行緒一次多開,會有 "引動過程的目標傳回例外狀況。"
multithreading - 'System.Reflection.TargetInvocationException'
//若是已經取消背景作業,就不去更新表單資訊, //否則會引發 [引動過程的目標傳回例外狀況]。@應該跟我關閉報表畫面後
thread 會被強制關閉之類的問題有關吧
看有沒有辦法說能在關閉報表之後
對thread做安全的關閉動作
@大概發現說
如果用的是全域Form去跑
如果用的是全域Form去跑
不管事show, => 猜測是show完,Thread跑完結束,連帶關掉show造成
showDialog => 猜測是讀取同一個form,前一個thread還沒結束,下一個thread又呼叫這個form
怎樣都會發生
如果宣告 Form去跑
show 會發生 => 猜測是show完,Thread跑完結束,連帶關掉show造成
showDialog 還是會發生.....
@DisconnectedContext MDA警告?RuntimeCallableWrapper
關閉報表表單以後,通常會出現這個警告訊息'
應該是跟 報表相關變數資源鏈結沒有適時關閉有關係
關閉報表表單以後,通常會出現這個警告訊息'
應該是跟 報表相關變數資源鏈結沒有適時關閉有關係
目前將呼叫的Thread 設為 STA 單一執行緒
似乎就不會再出現這個問題
要在測試看看
STA(single threaded apartments)。apartment只是一个逻辑上的概念,它可以包含一个或多个线程。一个AppDomain可以包括一个或多个apartment。STA是指该apartment中只能包含一个thread。
MTA(multi threaded apartments)。指该apartment中可以包含多个thread。
STA and MTA 之间最大的区别就是MTA 可以在同一个apartment 中使用所有的共享资源并发执行多个线程。 而多个STA虽然可以共享数据,但是不能并发执行线程,存在性能问题。
@多執行緒開啟報表表單
會發生 引動過程的目標傳回例外狀況
因為 CrystalDecisions.CrystalReports.Engine.ReportDocument 可能再引用外部程式的時候
似乎就不會再出現這個問題
要在測試看看
.NET Threading Model(STA and MTA)
STA(single threaded apartments)。apartment只是一个逻辑上的概念,它可以包含一个或多个线程。一个AppDomain可以包括一个或多个apartment。STA是指该apartment中只能包含一个thread。
MTA(multi threaded apartments)。指该apartment中可以包含多个thread。
STA and MTA 之间最大的区别就是MTA 可以在同一个apartment 中使用所有的共享资源并发执行多个线程。 而多个STA虽然可以共享数据,但是不能并发执行线程,存在性能问题。
@多執行緒開啟報表表單
會發生 引動過程的目標傳回例外狀況
因為 CrystalDecisions.CrystalReports.Engine.ReportDocument 可能再引用外部程式的時候
會動到某塊記憶體吧
當載入資料以後其他執行緒也跟著補上
又透過同個com元件對該記憶體做事情
而產生例外
@目前透過 將 ReportDocument 宣告為全域變數
以 SyncLock 該報表文件變數
'載入報表資源動作
End SyncLock
讓每個 Thread 依序執行載入報表動作
========================================
可能變成要走兩個完全不同的SQL
A.讓form上面呈現資料 (相關表單,變數為全域變數)
B.部呈現資料,做multi-thread轉檔 (相關表單為區域變數)
=======================================
目前測試可以執行多執行緒轉檔
但是有點邏輯上的錯誤
應該是變數切的不夠好
造成說同時轉檔寫入檔案會寫到相同內容資料
看是txt部分,還是轉excel部分
@發現說 DataGridView宣告為區域變數,
並且指定 DataSource,
是沒有意義的
不會產生任何資料鏈結
除非DataGridView 綁定在 form 表單之上
也就是說 DataGridView 可能無法當作multi-thread 的容器
不然就是要再想其他方式
直接傳 Table 之類的
目前透過傳 Table 資料轉 Excel
'有寫入相同檔名資料問題發生
要家判斷如果亂數檔已存在
重新亂數
======================================
======================================
目前測試 partPrice可以跑
只要注意遺下
需要兩個背景執行
一個跑動畫
一個跑後端資料庫(主要工作)
主執行緒專注在其他東西 (這邊怪怪的,要再研究)
沒辦法把主要工作直接放在 主執行緒
會變成說圖沒辦法跑
======================================
The Parallel Programming Of .NET Framework 4.0(1) - Beginning
可能變成要走兩個完全不同的SQL
A.讓form上面呈現資料 (相關表單,變數為全域變數)
B.部呈現資料,做multi-thread轉檔 (相關表單為區域變數)
=======================================
目前測試可以執行多執行緒轉檔
但是有點邏輯上的錯誤
應該是變數切的不夠好
造成說同時轉檔寫入檔案會寫到相同內容資料
看是txt部分,還是轉excel部分
@發現說 DataGridView宣告為區域變數,
並且指定 DataSource,
是沒有意義的
不會產生任何資料鏈結
除非DataGridView 綁定在 form 表單之上
也就是說 DataGridView 可能無法當作multi-thread 的容器
不然就是要再想其他方式
直接傳 Table 之類的
目前透過傳 Table 資料轉 Excel
'有寫入相同檔名資料問題發生
要家判斷如果亂數檔已存在
重新亂數
======================================
如何在 Visual Basic.NET 或 Visual Basic 2005 中建立的執行緒
Thread.Start 方法 (Object)
How to pass multiple parameters in thread in VB
可以用~再來就看怎麼切
變數宣告藥用區域變數
最後結果再丟到痊癒變數
可能連轉檔得時候,用的datagridview都要變成區域宣告的
目前跑的都是讓他直接跑form上面宣告的DGV
挖靠超麻煩
這樣DGV顯示的數值也要弄進來
======================================
目前測試 partPrice可以跑
只要注意遺下
需要兩個背景執行
一個跑動畫
一個跑後端資料庫(主要工作)
主執行緒專注在其他東西 (這邊怪怪的,要再研究)
沒辦法把主要工作直接放在 主執行緒
會變成說圖沒辦法跑
======================================
The Parallel Programming Of .NET Framework 4.0(1) - Beginning
沒有留言:
張貼留言