DataGrid에서 마스터 고객을 여는 버튼이있는 기본 폼이 있습니다. dataview.rowfilter를 사용하여 데이터를 필터링하기 위해 dataview를 사용합니다. 양식로드 중에 문제가 발생했습니다. 5 ~ 6 초가 소요됩니다 (프로그램이 응답하지 않습니다). 내가 뭘 하려는지 배경에있는 데이터 뷰에 데이터를로드하고 workercompleted에 gridview에 표시하는 것입니다.backgroundworker throw "양식을 만드는 동안 오류가 발생했습니다 ..."
"폼을 만드는 동안 오류가 발생했습니다. 자세한 내용은 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 부분에 "declaration expected"오류가 발생합니다. invoke 메소드를 사용하면 작동하지만 5 ~ 6 초의 로딩 시간이 필요합니다. – user2771233
SyncLock에 적합한 개체를 추가하는 것을 기억하고 있습니까? 위의 내용에 "SyncLock mydataview"를 입력했습니다. 컨트롤에 가져온 레코드 수를 확인하고 폼에보고하여 다른 스레드를 추가하여로드 진행률을 모니터링하여 데이터가 여전히 있음을 알 수 있습니다 로드. 안타깝게도 가져 오기가 필요한 많은 데이터가있는 경우에는로드 시간에 대해별로 신경 쓰지 않아도됩니다. –