User 13886544 Ответов: 2

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


Я пытаюсь показать picBox с. gif в нем, когда нажимаю btnCalculate (кнопка Calculate). Пикбокс уже выведен на передний план, а свойство visible имеет значение false. Я установил свойство visible в true после процедуры btnCalculate Sub, а затем использовал контур счетчика, чтобы попытаться воспроизвести файл .gif примерно за 5 секунд до того, как он покажет окончательные вычисления. Однако он выполняет весь код и никогда не показывает gif.Я использую Visual Studio 2017 с .NET

Во-вторых, я попытался вызвать вторичную форму windows с той же картинкой в другом picBOX и отключил picBOX от основной формы. В основной форме я использую frmPicture.Команда ShowDialog() и форма появляется и покрывает исходную форму, однако, как бы я закодировал вторую форму, чтобы либо закрыть, либо скрыть. Я попытался использовать цикл use a во второй форме, а затем команду Me.Close, и это не сработало. Затем я попытался сделать петлю с собой.Скройте команду, и я получу ошибку. Извините, ребята, это мой первый семестр в Visual Basic, и в книге нет подробностей о вторичных формах.

Что я уже пробовал:

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
        picBox.Visible = True
        picBox.BringToFront()

        'Sound Effect on button click
        My.Computer.Audio.Play(My.Resources._41089869_coffee_maker_brewing_coffee_02, AudioPlayMode.Background)

        Dim intCount As Integer = 1
        For intCount = 1 To 1000000000

        Next


        'This procedure calculates the total of an order
        Dim decSubtotal As Decimal      'Holds the order subtotal
        Dim decTax As Decimal           'Holds the sales tax
        Dim decTotal As Decimal         'Holds the order total

        decSubtotal = CalcBagelCost() + CalcToppingCost() + CalcCoffeeCost()
        decTax = CalcTax(decSubtotal)
        decTotal = decSubtotal + decTax

        lblSubtotal.Text = decSubtotal.ToString("c")
        lblTax.Text = decTax.ToString("c")
        lblTotal.Text = decTotal.ToString("c")


        picBox.Visible = False


    End Sub

2 Ответов

Рейтинг:
14

RossMW

Причина в том, что отображение и вычисления выполняются в одном потоке.

Так что варианты есть
1. Запустите их в отдельных потоках см. https://support.microsoft.com/en-au/help/315577/how-to-create-threads-in-visual-basic-net-or-visual-basic-2005[^]
или
2. Как быстро и грязно добавить приложение.doevents() к циклу, который может решить вашу проблему, но немного замедлит ее


Рейтинг:
0

CaseBody

Я бы запустил вычисления с помощью фонового рабочего.