2012-10-28 2 views
0

내의 데이터 테이블과 변수에 액세스하려면 폼로드시 채워지는 Datatable을 사용합니다. 그리고 backgroundworker를 사용하여 네트워크 작업을 수행합니다. backgroundworker의 doWork() 내부 datata에서 데이터가 필요하고 또한 폼로드시 생성 한 클래스의 객체가 필요합니다. 데이터 테이블 및 클래스 개체의 데이터는 Dowork() 내에서 업데이트되며 datatable 및 클래스 개체의이 값은 Backgroundworker의 ProgressChanged에서 목록으로 업데이트됩니다. datatable 및 class 개체는 모두 Form1로 전역 선언됩니다. 하지만이 스레드 안전하지 않습니다 읽을 수 있습니다. 그래서 올바른 방법으로 스레드 안전 방식으로 사용하는 데 사용할?내 프로그램에서 Backgroundworker

+0

잠김 및/또는 매개 변수가있는 ThreadStart를 살펴보십시오. – Tim

답변

0

당신은 DoWork에 RunWorkerAsync에서 하나 개의 인자를 전달할 수 있으며,이 배열을 통해 모든 것을 얻을 수 있습니다 : 즉시 수정할 시작으로

Private Sub BGW_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) 
    Dim dt as DataTable 

    dt = TryCast(e.Argument(0), DataTable) 
    ' and so on 

:

dim bgw as new BackgroundWorker 
dim dt as DataTable 
dim anything as ... 
... 
bgw.RunWorkerAsync(New Object() {dt, anything, ...}) 

... 

doWork 내부 양식에 UI와 관련된 모든 것이 있으면 BeginInvoke 및 InvokeRequired에 대한 읽기를 시작할 수 있습니다. 아마도 거기에는 많은 것들이 있지만 아마도이 질문은 제가 좋은 샘플 일 수 있습니다. Multithreading for a progressbar and code locations (vb.net)?