Заставка VB.net не обновляется - PullRequest
2 голосов
/ 21 января 2010

Я сделал заставку и хочу изменить текст, так как загружаются разные части программы, но экран не обновляется, когда я использую обновление или обновление.

    Dim splash As New BMSSplash
    splash.Show()

    splash.lblStatus.Text = "Retrieving active users..."
    splash.Refresh()

    buddyList.setuserList()
    System.Threading.Thread.Sleep(5000)  

    splash.lblStatus.Text = "Retrieving bonder info..."
    splash.Refresh()
    GetBonderGeneralAndDeviceList(CurrentBonderSetup)
    System.Threading.Thread.Sleep(5000)

    splash.Close()
    MakeTree(CurrentBonderSetup)

Ответы [ 3 ]

2 голосов
/ 21 января 2010

Лучше всего выполнять все задачи инициализации в фоновом потоке. Это сохранит отзывчивость вашего пользовательского интерфейса.

Этот ответ на связанный вопрос содержит пример кода на C #.

Возможно, проще всего использовать BackgroundWorker для этой задачи (просто перетащите компонент BackroundWorker на форму). Используя BackgroundWorker, вы также можете легко сообщить процент уже выполненной инициализации, например, для отображения в индикаторе выполнения.

Public Class Form1
    Private splash As BMSSplash

    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        splash = New BMSSplash
        splash.Show()

        BackgroundWorker1.WorkerReportsProgress = True
        BackgroundWorker1.RunWorkerAsync()
    End Sub    

    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, 
        ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

        Dim percentageCompleted As Integer

        BackgroundWorker1.ReportProgress(percentageCompleted, 
            "Retrieving active users...")

        ' replace the sleeps with the longer-running init task
        System.Threading.Thread.Sleep(5000)

        BackgroundWorker1.ReportProgress(percentageCompleted, 
            "Retrieving bonder info...")

        System.Threading.Thread.Sleep(5000)
    End Sub

    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, 
        ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged

        Dim message As String = e.UserState
        splash.lblStatus.Text = message
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, 
        ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted

        splash.Close()
    End Sub
End Class
0 голосов
/ 21 января 2010

Я сделал это, и это не сработало. На самом деле теперь моя GetBonderGeneralAndDeviceList функция не работает должным образом,

Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    splash = New BMSSplash
    splash.Show()

    BackgroundWorker1.WorkerReportsProgress = True
    BackgroundWorker1.RunWorkerAsync()

    MakeTree(CurrentBonderSetup)

End Sub


Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

    Dim percentageCompleted As Integer

    percentageCompleted = 30
    BackgroundWorker1.ReportProgress(percentageCompleted, "Retrieving active users...")
    buddyList.setuserList()
    System.Threading.Thread.Sleep(5000)

    percentageCompleted = 70
    BackgroundWorker1.ReportProgress(percentageCompleted, "Retrieving bonder info...")
    GetBonderGeneralAndDeviceList(CurrentBonderSetup)

End Sub


Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged

    Dim message As String = e.UserState
    splash.lblStatus.Text = message

End Sub


Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    splash.Close()
End Sub
0 голосов
/ 21 января 2010

у диво было хорошее предложение. Тем не менее, одна вещь выделяется в вашем первоначальном вопросе.

Если экран-заставка очень быстро отображается и прячется, я бы посоветовал полностью от него избавиться.

Если вы ожидаете, что эти функции займут немного времени, тогда вам гораздо лучше загрузить базовое приложение и позволить пользователю войти как можно быстрее. Затем отключите различные потоки, чтобы загрузить дополнительные ресурсы по мере необходимости.

Например, покажите несколько пустой экран, после чего ваш список друзей начнет появляться при загрузке данных. То же самое для Списка устройств Бондер.

Это приводит к гораздо более счастливым пользователям, которые думают, что ваше приложение работает быстрее, чем на самом деле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...