계산 작업이 많은 작업을 처리하는 일반적인 VB 방법은 기본 스레드가 UI를 계속 처리하는 동안 백그라운드 작업자 스레드에 넣는 것입니다.Visual Basic.NET : UI를 업데이트하는 스레드를 만드는 방법
이유가 무엇이든 나는 다른 방법으로이 작업을 수행해야한다고 말하면됩니다. 메인 스레드는 툴툴 거리는 작업을 수행하고 배경은 UI를 업데이트합니다.
여기까지 제가 지금까지 가지고 있습니다. 유일한 문제는 UI 창 (Form1)이 다시 그려지는 동안 움직이거나 크기를 조정하지 않고도 상호 작용할 수 없다는 것입니다 (마우스 커서가 모래 시계 모양으로 바뀌고 클릭하지 않음).
Public Class ProgressDisplay
Private trd As Thread
Public Sub New()
trd = New Thread(AddressOf threadtask)
trd.Start()
End Sub
Private Sub threadtask()
Dim f1 As Form1
f1 = New Form1
f1.Show()
Do
f1.Update()
Thread.Sleep(100)
Loop
End Sub
End Class
편집 : 이상적으로는 클라이언트는 다음과 같이 호출 할 클라이언트
Public Class ProgressDisplay
Public Sub New()
Public Sub Update(byval progress as int)
End Class
에 다음과 같은 인터페이스를 제공합니다 (실제로는 COM을 통해 관리되지 않는 C++에서 그러나 당신은 그림을 얻는다) :
Dim prog = new ProgressDisplay()
DoLotsOfWork(addressof prog.update) ' DoLotsOfWork method takes a callback argument to keep client informed of progress
문제는 내 코드에서 수행되지 않은 긴 작업입니다.이 클래스의 클라이언트에서 문제가 발생했습니다. 그래서, 나는 그것이 일어나는 곳을 제어 할 수 없다. 그것은 주 스레드에있다. 클라이언트가해야 할 일은 처음에는'SetupProgressIndicator' 메소드를 호출하고 때때로 IncrementProgressIndicator 메소드를 호출하는 것입니다. 그 일을 할 수 있습니까? –
자세한 상황을 설명해주십시오. 당신이 의미하는 바를 이해하는 것은 어렵습니다. –
업데이트 감사 참조 :) –