2017-12-19 1 views
-1

내 backgroundWorker doWork의 이벤트에는 실행할 코드가 많습니다. 각 코드를 실행 한 후에 레이블 텍스트를 변경할 수 있습니까?BackGroundWorker DoWork에서 레이블 텍스트 변경 WPF VB.NET

 Dim con As New SqlConnection("Data source=" & My.Settings.ip & "," & My.Settings.port & ";Network Library=DBMSSOCN;initial catalog=offpodb;User id=" & My.Settings.username & ";Password=" & My.Settings.password & ";") 
    con.Open() 
    If connected.Dispatcher.CheckAccess Then 
     connected.Content = "text" 
    Else 
     ' i dunno what to use here as it is not the same as WinForms 
    End If 

무엇을 할 : 예를 들어

?

또는

당신은 DoWork 방식의 사용자 인터페이스를 업데이트 안 나 WPF VB.NET

Label1.Invoke((MethodInvoker)delegate { 
Label1.Text = i.ToString() + "Files Converted";}); 

답변

1

이 C# 코드로 변환 도와주세요.

각 작업이 완료된 후 DoWork 방법으로 ReportProgress으로 전화하십시오. UserState 매개 변수에 표시 할 메시지를 설정하십시오.

그런 다음 ProgressChanged 이벤트를 양식에 처리하고 e.UserState에서 메시지를 추출한 다음이를 사용하여 레이블을 업데이트하십시오.

ReportProgress을 호출하여 메시지를 보내는 백그라운드 작업자로 생각하고 기본 폼이 ProgressChanged을 처리하여 메시지를받는 것으로 생각하십시오.

+0

글쎄, 각 작업이'DoWork' 이벤트에서 완료된 후에 라벨 텍스트를 변경하고 싶다면'ReportProgress'를 어떻게 사용해야합니까? 내가 언급했듯이, 나의 bgworker는 많은 작업을 가지고 있으며 나는 각 작업 후에 레이블 텍스트를 바꾸고 싶습니다. 어떻게해야합니까? –

+3

각 작업이 완료되면 'ReportProgress'를 호출합니다. 인수는 진행률 및 임의의 사용자 상태입니다. 아무거나 전달할 수 있습니다 (예 : 0으로 설정하고 % ProgressChanged 이벤트 핸들러에서 무시합니다. 사용자 상태는 무엇이든 될 수 있습니다. 귀하의 경우에는'Label'에 표시 할 텍스트를 전달하는 것이 좋습니다. 'ProgressChanged' 이벤트 핸들러에서,'String'을 얻고 이것을'Label'의'Text'에 할당하면됩니다. – jmcilhinney

+0

내 예제 [here] (http://www.vbforums.com/showthread.php?471889-Using-the-BackgroundWorker-Component)를 확인하십시오. 'String'이 전달되고 사용될 수있는 방법을 볼 수 있습니다. 루프 대신에 매번 다른 텍스트를 가진'ReportProgress'에 대한 여러개의 개별 호출이 있습니다. – jmcilhinney