首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用backgroundworker在单击按钮时显示动画加载gif vb.net

如何使用backgroundworker在单击按钮时显示动画加载gif vb.net
EN

Stack Overflow用户
提问于 2018-05-28 17:07:00
回答 1查看 3.9K关注 0票数 -3

各位,我更新了我的问题,我只是Visual Basic.Net和Oracle存储过程的新手。

我在网上找到了这套代码。它可以工作,但是,我如何才能将这个导入的CSV文件从使用Oracle存储过程从数据库获取行转换。

代码语言:javascript
复制
    Dim strRow As String()              'String array to read all fields in a row
Dim dblAmount As Double             'Variable for total amount 
Dim blnReported As Boolean = True   'Flag to check progress report completed or not

'Create TextFieldParser class to parse the stock.csv file in the current location
Dim txtFile As FileIO.TextFieldParser

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'Allow background operation to be cancelled
    bgWorker.WorkerSupportsCancellation = True

    'Allow background operation to report progress
    bgWorker.WorkerReportsProgress = True

    'Disable Stop Button. It is enabled only after start
    'button is pressed
    btnStop.Enabled = False

    'set status message
    lblStatus.Text = "Press Start to import data from csv."

    'Add columns to the grid
    dgvCSVData.Columns.Add("colNo", "No")
    dgvCSVData.Columns("colNo").Width = 30
    dgvCSVData.Columns.Add("colDate", "Date")
    dgvCSVData.Columns("colDate").Width = 60
    dgvCSVData.Columns.Add("colItem", "Item")
    dgvCSVData.Columns("colItem").Width = 120
    dgvCSVData.Columns.Add("colQty", "Quantity")
    dgvCSVData.Columns("colQty").Width = 50
    dgvCSVData.Columns.Add("colUnit", "Unit")
    dgvCSVData.Columns("colUnit").Width = 30
    dgvCSVData.Columns.Add("colAmt", "Amt")
    dgvCSVData.Columns("colAmt").Width = 60
End Sub

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
    'Disable Start button and Enable Stop
    btnStart.Enabled = False
    btnStop.Enabled = True

    'set status message
    lblStatus.Text = "Importing data from CSV file."

    'Start time-consuming operation in background
    Call bgWorker.RunWorkerAsync()
End Sub

Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
    'Enable Start button and disable Stop
    btnStart.Enabled = True
    btnStop.Enabled = False

    'Stop background operation
    bgWorker.CancelAsync()

    'set status message
    lblStatus.Text = "Import cancelled. Press Start again."
End Sub

Private Sub bgWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgWorker.DoWork
    Dim intCount As Int16 = 0
    txtFile = New FileIO.TextFieldParser("stock.csv")
    'Specify structure of the file
    txtFile.TextFieldType = FileIO.FieldType.Delimited
    txtFile.SetDelimiters(",")

    'Skip header row
    txtFile.ReadFields()

    'Start reading data from file
    While Not txtFile.EndOfData

        If bgWorker.CancellationPending Then
            e.Cancel = True
            Exit Sub

        Else

            'Wait for Progress Report to finish
            While Not blnReported
                Application.DoEvents()
            End While

            'Read all field in a row into a string array
            strRow = txtFile.ReadFields()

            'Do some calculations and assign value to data grid
            dblAmount = CDbl(strRow(3)) * CDbl(strRow(4))

            'Add some sleep to simulate a long running operation
            System.Threading.Thread.Sleep(500)

            'Progress report pending
            blnReported = False

            'increment counter
            intCount += 1

            'Report the progress
            bgWorker.ReportProgress(10, intCount)

        End If

    End While
End Sub

Private Sub bgWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bgWorker.ProgressChanged
    'Copy values to data grid
    dgvCSVData.Rows.Add(strRow)
    dgvCSVData.Rows(dgvCSVData.CurrentRow.Index - 1).Cells("colAmt").Value = dblAmount

    pgbCopyProgress.Value = e.UserState
    'Progress report finished
    blnReported = True
End Sub

Private Sub bgWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgWorker.RunWorkerCompleted
    If e.Cancelled Or Not IsNothing(e.Error) Then
        'Clear the data grid
        dgvCSVData.Rows.Clear()
    Else
        'Progress completed
        pgbCopyProgress.Value = 100

        'Release txtfile
        txtFile.Dispose()
        btnStop.Enabled = False
        btnStart.Enabled = True

    End If
End Sub

下面是我调用数据库中的行的代码

代码语言:javascript
复制
 Public Function RESA_Checker(ByVal stores As String, ByVal bus_date As String, ByVal warehouse As String)
    dt = New DataTable
    bg.GetProcDataTable(connStr, "SALES_CHECKER.procedure_checker")
    cmd.Parameters.Add(New OracleParameter("stores", OracleDbType.Varchar2)).Value = stores
    cmd.Parameters.Add(New OracleParameter("bus_date", OracleDbType.Varchar2)).Value = bus_date
    cmd.Parameters.Add(New OracleParameter("warehouse", OracleDbType.Varchar2)).Value = warehouse
    cmd.Parameters.Add(New OracleParameter("O_OUTPUT", OracleDbType.RefCursor)).Direction = ParameterDirection.Output
    adap_or.SelectCommand = cmd
    adap_or.Fill(dt)


    Return dt
    ora_conn.Close()
End Function

我的目的是通过一个带有进度条或动画gif的对话框,通知用户表单正在加载,但仍在从数据库中获取记录,并说“请等待”/“正在搜索”,并防止用户认为表单已崩溃而产生混淆。

附注:如果给出视频教程的链接会很有帮助。我真的希望你能帮助我,谢谢。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50562734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档