Я делаю некоторые вызовы к компоненту пользовательского интерфейса из другого ссылочного проекта над интерфейсомОсвежающий не работает
UI-компонент:
Public Class PleaseWaitWindow
Implements PleaseWaitInterface
Sub New(initStateText As String)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
tbStateDescription.Text = initStateText
Me.Activate()
End Sub
Public Property currentStepText As String Implements PleaseWaitInterface.currentStepText
Get
Return tbStateDescription.Text
End Get
Set(value As String)
tbStateDescription.Text = value
tbStateDescription.InvalidateVisual()
End Set
End Property
Public Sub Display() Implements PleaseWaitInterface.Display
Me.Show()
Me.Activate()
End Sub
Public Sub Dispose() Implements PleaseWaitInterface.Dispose
Me.Close()
End Sub
Public Property maxSteps As Integer Implements PleaseWaitInterface.maxSteps
Get
Return pbCurrentProgress.Maximum
End Get
Set(value As Integer)
pbCurrentProgress.Maximum = value
End Set
End Property
Public Sub PerformStep() Implements PleaseWaitInterface.PerformStep
pbCurrentProgress.Value += 1
pbCurrentProgress.InvalidateVisual()
End Sub
End Class
Пока я делаю эти звонки из того же проекта все работает
как здесь:
Private Function startGeneration_normal() As Boolean
//Do some stuff
pw.PerformStep()
pw.currentStepText = ("Loading data, no stepping is available.")
tar.startworking(pw)
//Do some stuff
End Function
Но когда я прохожу в систему terfaceobject в ссылочном проект и попытаться использовать его как это:
Public Function startworking(pw As PleaseWaitInterface) As Boolean
tempExportFileName = "Export" & DateTime.Now.ToString("yyyy-MM-dd_HH.mm")
//Do some stuff
pw.currentStepText = ("Current Task: formating XML")
//Do some more stuff
End Function
значение в изменениях объекта (проверено в отладчике), но визуальные эффекты не не обновляется, пока функция start_generate возвращается из функции startworking. Когда он возвращается из функции в указанном проекте, значения обновляются, исходя из текущего состояния.
Почему пользовательский интерфейс не обновляется, пока программа выполняет материал в указанном проекте?
Вы, кажется, работает этот код синхронно в потоке пользовательского интерфейса, так что он будет заблокирован и не будет обновляться что-нибудь. Вместо этого вы должны использовать асинхронный механизм, например BackgroundWorker. – Clemens
спасибо, что сработал – lsteinme