我有主窗體有一個打開數據網格上的主客戶的按鈕。我使用dataview來過濾使用dataview.rowfilter的數據。 問題是,在表單加載期間。它需要5-6秒(程序在那段時間內沒有響應)。我想要做的是將數據加載到背景上的數據視圖,並顯示在workercompleted的gridview上。backgroundworker拋出「創建表單時發生錯誤...」
它給了我這個錯誤:「創建表單時發生錯誤,詳細信息請參見Exception.InnerException。錯誤是:在創建OLE調用之前,當前線程必須設置爲單線程單元(STA)模式。你的Main函數有STAThreadAttribute標記在它上面。「 - > on dowork
我在某處閱讀我應該使用Invoke。但我不知道如何使用它。 這裏是我的代碼:
Private Sub custcall_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TBfind.Enabled = False
SetMyCustomFormat("yyyy-MM-dd HH:mm:ss")
BWcustload.RunWorkerAsync()
End Sub
Private Sub BWcustload_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BWcustload.DoWork
mydataview = New DataView(datatablecust)
End Sub
Private Sub BWcustload_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BWcustload.RunWorkerCompleted
DGVcustomer.DataSource = mydataview
TBfind.Enabled = True
End Sub
嗨,納森謝謝你的回覆。使用synclock方法會導致snyclock部分出現「聲明預期」錯誤。當我使用invoke方法時,它可以工作,但仍然需要5-6秒的加載時間。 – user2771233
您是否記得向SyncLock添加合格對象?注意上面我輸入了「SyncLock mydataview」 可以通過檢查導入到控件上的記錄數來添加另一個線程來監視加載的進度,並向窗體報告,以便用戶知道數據仍然存在加載。遺憾的是,如果您需要導入大量數據,那麼關於加載時間的事情就不會太多了。 –