Показать загрузочный экран в vb.net - PullRequest
3 голосов
/ 31 декабря 2008

Мне нужно показать экран или что-то вроде «Загрузка» или что-то еще, пока работает длинный процесс.

Я создаю приложение с помощью Windows Media Encoder SDK, и для инициализации кодера требуется некоторое время. Я хотел бы, чтобы во время запуска кодировщика всплыло окно с надписью «Загрузка», а затем исчезло, когда кодировщик завершил работу, и они могут продолжить работу с приложением.

Любая помощь будет оценена. Спасибо!

Ответы [ 3 ]

9 голосов
/ 31 декабря 2008

Создайте форму, которая будет служить диалогом «Загрузка». Когда вы будете готовы инициализировать кодировщик, отобразите эту форму, используя метод ShowDialog(). Это приводит к тому, что пользователь не может взаимодействовать с формой, отображающей диалоговое окно загрузки.

Диалог загрузки должен быть закодирован так, чтобы при загрузке он использовал BackgroundWorker для инициализации кодера в отдельном потоке. Это гарантирует, что диалог загрузки останется отзывчивым. Вот пример того, как диалоговая форма может выглядеть:

Imports System.ComponentModel

Public Class LoadingForm ' Inherits Form from the designer.vb file

    Private _worker As BackgroundWorker

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)

        _worker = New BackgroundWorker()
        AddHandler _worker.DoWork, AddressOf WorkerDoWork
        AddHandler _worker.RunWorkerCompleted, AddressOf WorkerCompleted

        _worker.RunWorkerAsync()
    End Sub

    ' This is executed on a worker thread and will not make the dialog unresponsive.  If you want
    ' to interact with the dialog (like changing a progress bar or label), you need to use the
    ' worker's ReportProgress() method (see documentation for details)
    Private Sub WorkerDoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
        ' Initialize encoder here
    End Sub

    ' This is executed on the UI thread after the work is complete.  It's a good place to either
    ' close the dialog or indicate that the initialization is complete.  It's safe to work with
    ' controls from this event.
    Private Sub WorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
        Me.DialogResult = Windows.Forms.DialogResult.OK
        Me.Close()
    End Sub

End Class

И, когда вы будете готовы отобразить диалоговое окно, вы сделаете так:

Dim frm As New LoadingForm()
frm.ShowDialog()

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

0 голосов
/ 31 декабря 2008

Две вещи, которые вы можете попробовать.

После установки вашего ярлыка (как указано в комментарии к Митчелу) позвоните Application.DoEvents()

Другой вариант - запустить код инициализации для кодировщика в процессе BackgroundWorker.

0 голосов
/ 31 декабря 2008

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

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

Это всего лишь несколько идей, и это действительно зависит от того, что вы делаете.

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