2015-07-13 3 views
1

Я делаю некоторые вызовы к компоненту пользовательского интерфейса из другого ссылочного проекта над интерфейсомОсвежающий не работает

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. Когда он возвращается из функции в указанном проекте, значения обновляются, исходя из текущего состояния.

Почему пользовательский интерфейс не обновляется, пока программа выполняет материал в указанном проекте?

+1

Вы, кажется, работает этот код синхронно в потоке пользовательского интерфейса, так что он будет заблокирован и не будет обновляться что-нибудь. Вместо этого вы должны использовать асинхронный механизм, например BackgroundWorker. – Clemens

+0

спасибо, что сработал – lsteinme

ответ

0

Решение Clemens, используя фон рабочего сделал трюк, так
проблема:
решена

Смежные вопросы