使用BackGroundWorker内部的值更新DataGridView [英] Updating DataGridView with values from inside BackGroundWorker

查看:55
本文介绍了使用BackGroundWorker内部的值更新DataGridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨!


我有一个不断发展壮大的计划。 过去需要3秒才能运行,但经过多年的多次更新后,现在需要2分钟才能运行。 我决定将所有繁重的工作转移到后台工作人员并更新标签,以便用户可以看到发生了某些事情并且程序没有被冻结。 这很好。


我遇到问题的部分是在程序结束时更新datagridvivew以显示结果。   我理解GUI和后台工作者在不同的线程上,所以我需要找到一种方法来从一个线程到另一个线程获取信息。 
这些年来我多次尝试这样做(是的,YEARS!),但是永远无法让它工作,没有人在抱怨(它真的让我感到烦恼!)。 经过多次尝试后我才放弃,直到现在。 我需要让它工作,所以我达到了
out :))


这是运行程序后datagridview的样子:



背景工作者:

 Private WithEvents bgw As New System.ComponentModel.BackgroundWorker 




这是代码。 有13个单独的进程调用它们执行不同的计算。 所有结果都存储在列表中。 最后,我调用该过程将信息传输到DGV:

 Dim thisNPMarginal As New NP_Marginal 
Dim SecondNPMarg As Boolean = False
Newspaper_Marginals(thisNPMarginal,SecondNPMarg)

Dim thisRAMarginal As New RA_Marginal
Dim SecondRAMarg As Boolean = False
Radio_Marginals(thisRAMarginal,SecondRAMarg)

Dim thisTVMarginal As New TV_Marginal
Dim SecondTVMarg As Boolean = False
TV_Marginals(thisTVMarginal,SecondTVMarg)

Dim thisMTMarginal As New MT_Marginal
Dim SecondMTMarg As Boolean = False
MT_Marginals(thisMTMarginal,SecondMTMarg)

Dim thisMMMarginal As New MM_Marginal
Dim SecondMMMarg As Boolean = False
MM_Marginals(thisMMMarginal,SecondMMMarg)

Dim thisINMarginal As New IN_Marginal
Dim Second INMarg As Boolean = False
IN_Marginals(thisINMarginal,SecondINMarg)

Dim thisECMarginal As New EC_Marginal
Dim SecondECMarg As Boolean = False
EC_Marginals(thisECMarginal,SecondECMarg)

Dim thisDGMarginal As New DG_Marginal
Dim SecondDGMarg As Boolean = False
DG_Marginals(thisDGMarginal,SecondDGMarg)

Dim thisEQMarginal As New EQ_Marginal
Dim SecondEQMarg As Boolean = False
EQ_Marginals(thisEQMarginal,SecondEQMarg)

Dim thisESMarginal As New ES_Marginal
Dim SecondES​​Marg As Boolean = False
ES_Marginals(thisESMarginal,SecondES​​Marg)

Dim thisTXTMarginal As New TXT_Marginal
Dim SecondTXTMarg As Boolean = False
TXT_Marginals(thisTXTMarginal,SecondTXTMarg)

Dim thisGSMarginal As New GS_Marginal
Dim SecondGSMarg As布尔= Fa lse
GS_Marginals(thisGSMarginal,SecondGSMarg)

Dim thisHHIMarginal As New HHI_Marginal
Dim SecondHHIMarg As Boolean = False
HHI_Marginals(thisHHIMarginal,SecondHHIMarg)

Populate_MarginalDGV(thisNPMarginal,thisRAMarginal,thisTVMarginal,thisMTMarginal,
thisMMMarginal,thisINMarginal,thisECMarginal,thisDGMarginal,thisEQMarginal,
thisESMarginal,thisTXTMarginal,thisGSMarginal,thisHHIMarginal)




这是我调用加载datagridview的过程的代码。 所以我认为*这是我需要弄清楚如何从backgroundworker做的部分或者我应该将我需要的值传递回主线程并在那里进行吗?

 Private Sub Populate_MarginalDGV(ByVal thisNPMarginal,ByVal thisRAMarginal,ByVal thisTVMarginal,ByVal thisMTMarginal,ByVal thisMMMarginal,_ 
ByVal thisINMarginal,ByVal thisECMarginal,ByVal thisDGMarginal,ByVal thisEQMarginal,ByVal thisESMarginal,_
ByVal thisTXTMarginal,ByVal thisGSMarginal,ByVal thisHHIMarginal)


dgv_MARGINALS.Rows.Add(" 1",thisNPMarginal.NP1,thisRAMarginal.RA1,thisTVMarginal.TV1,thisMTMarginal。 MT1,_
thisMMMarginal.MM1,thisINMarginal.IN1,thisECMarginal.EC1,thisDGMarginal.DG1,_
thisEQMarginal.EQ1,thisESMarginal.ES1,thisTXTMarginal.TXT1,thisGSMarginal.GS1, thisHHIMarginal.HHI1)
dgv_MARGINALS.Rows.Add(" 2",thisNPMarginal.NP2,thisRAMarginal.RA2,thisTVMarginal.TV2,thisMTMarginal.MT2,_
thisMMMarginal.MM2,thisINMarginal.IN2,thisECMarginal。 EC2,thisDGMarginal.DG2,_
thisEQMarginal.EQ2,thisESMarginal.ES2,thisTXTMarginal.TXT2,thisGSMarginal.GS2,thisHHIMarginal.HHI2)
dgv_MARGINALS.Rows.Add(" 3",thisNPMarginal.NP3, thisRAMarginal.RA3,thisTVMarginal.TV3,thisMTMarginal.MT3,_
thisMMMarginal.MM3,thisINMarginal.IN3,thisECMarginal.EC3,thisDGMarginal.DG3,_
thisEQMarginal.EQ3,thisESMarginal.ES3,thisTXTMarginal.TXT3, thisGSMarginal.GS3,thisHHIMarginal.HHI3)
dgv_MARGINALS.Rows.Add(" 4",thisNPMarginal.NP4,thisRAMarginal.RA4,thisTVMarginal.TV4,thisMTMarginal.MT4,_
thisMMMarginal.MM4,thisINMarginal.IN4,thisECMarginal.EC4,thisDGMarginal.DG4,_
thisEQMarginal.EQ4,thisESMarginal.ES4,thisTXTMarginal.TXT4,thisGSMarginal.GS4,thisHHIMarginal.HHI4)
dgv_MARGINALS.Rows.Add ("5",thisNPMarginal.NP5,thisRAMarginal.RA5,thisTVMarginal.TV5,thisMTMarginal.MT5,_
thisMMMarginal.MM5,thisINMarginal.IN5,thisECMarginal.EC5,thisDGMarginal.DG5,_
thisEQMarginal。 EQ5,thisESMarginal.ES5,thisTXTMarginal.TXT5,thisGSMarginal.GS5,thisHHIMarginal.HHI5)

with dgv_MARGINALS
.Enabled = True
.AlternatingRowsDefaultCellStyle.BackColor = Color.LightBlue
.Columns(0).Width = 25
.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(1).DefaultCellStyle.Alignment = DataGridViewContent Alignment.MiddleCenter
.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(6).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(7).DefaultCellStyle。 Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(8).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(9).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(10).DefaultCellStyle .Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(11).DefaultCellStyle.Alignment = DataGridViewConte ntAlignment.MiddleCenter
.Columns(12).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(13).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
End with

结束子


 

我有13自定义类(每个包含5个变量)和每个类的列表。 所有都是全局定义并存储DGV的数据:

私有类NP_Marginal 
Public NP1 As String =" - - "
Public NP2 As String =" - "
Public NP3 As String =" - "
Public NP4 As String =" - "
Public NP5 As String =" - "
结束类

私有类RA_Marginal
Public RA1 As String =" - "
Public RA2 As String =" - "
Public RA3 As String =" - "
Public RA4 As String =" - "
Public RA5 As String =" - "
结束等级

私人等级TV_Marginal
Public TV1 As String =" - "
Public TV2 As String =" - "
Public TV3 As String =" - "
Public TV4 As String =" - "
Public TV5 As String =" - "
结束类

私有类MT_Marginal
Public MT1 As String =" - "
Public MT2 As String =" - "
Public MT3 As String =" - "
Public MT4 As String =" - "
Public MT5 As String =" - "
结束等级

私有等级MM_Marginal
公共MM1为字符串=" - "
Public MM2 As String =" - "
Public MM3 As String =" - "
Public MM4 As String =" - "
Public MM5 As String =" - "
结束类

私有类IN_Marginal
Public IN1 As String =" - "
Public IN2 As String =" - "
Public IN3 As String =" - "
Public IN4 As String =" - "
Public IN5 As String =" - "
结束类

私有类EC_Marginal
Public EC1 As String =" - "
Public EC2 As String =" - "
Public EC3 As String =" - "
Public EC4 As String =" - "
Public EC5 As String =" - "
结束等级

私有等级DG_Marginal
Public DG1 As String =" - "
Public DG2 As String =" - "
Public DG3 As String =" - "
Public DG4 As String =" - "
Public DG5 As String =" - "
结束等级

私有等级EQ_Marginal
Public EQ1 As String =" - "
Public EQ2 As String =" - "
Public EQ3 As String =" - "
Public EQ4 As String =" - "
Public EQ5 As String =" - "
结束类

私有类ES_Marginal
Public ES1 As String =" - "
Public ES2 As String =" - "
Public ES3 As String =" - "
Public ES4 As String =" - "
Public ES5 As String =" - "
结束类

私有类TXT_Marginal
Public TXT1 As String =" - "
Public TXT2 As String =" - "
Public TXT3 As String =" - "
Public TXT4 As String =" - "
Public TXT5 As String =" - "
结束类

私有类GS_Marginal
公共GS1 As String =" - "
Public GS2 As String =" - "
Public GS3 As String =" - "
Public GS4 As String =" - "
Public GS5 As String =" - "
结束等级

私有等级HHI_Marginal
公共HHI1 As String =" - "
Public HHI2 As String =" - "
Public HHI3 As String =" - "
Public HHI4 As String =" - "
Public HHI5 As String =" - "
结束类

私有NPMarginalList作为新列表(NP_Marginal)
私有RAMarginalList作为新列表(Of RA_Marginal)
私有TVMarginalList作为新列表(Of TV_Marginal)
Private MTMarginalList As New List(Of MT_Marginal)
Private MMMarginalList As New List(Of MM_Marginal)
Private INMarginalList As New List(Of IN_Marginal)
Private ECMarginalList As New List(Of EC_Marginal) )
私人DGMarginal列为新列表(Of DG_Marginal)
私有EQMarginal列为新列表(Of EQ_Marginal)
私有ESMarginal列为新列表(Of ES_Marginal)
私有TXTMarginal列为新列表( TXT_Marginal)
私有GSMarginalList为新列表(Of GS_Marginal)
私有HHIMarginalList为新列表(Of HHI_Marginal)


 

非常感谢任何帮助!它让我疯了!

如果有人能告诉我如何填充一行,我可以弄清楚剩下的一行。

我一直在我的程序中移动这么多东西,我担心我会破坏它并忘记如何

把它放回去......

TIA !!!

Joni



解决方案

Hello Joni,


我有两种不同的模式,既不从类加载DataGridView,而是使用后端数据库,通过DataTable将行加载到DataGridView中其他通过类实例。


上面提到的第一个使用与



Hi!

I have a program that keeps growing and growing.  It used to take 3 seconds to run, but after many updates over the years, it now takes over 2 minutes to run.  I decided to move all the heavy lifting to a backgroundworker and update a label so the user can see that something is happening and the program isn't frozen.  That works fine.

The part I'm having trouble with is updating a datagridvivew at the end of the program to display the results.   I understand the GUI and backgroundworker are on different threads so I need to find a way to get the info from one thread to the other.  I've tried to do this several times over the years (yes, YEARS!) but could never get it to work and noone was complaining (it just really bothered me!).  So after many attempts I just gave up, until now.  I need to get this to work so I'm reaching out :)

This is how the datagridview looks after running the program:



Backgroundworker:

 Private WithEvents bgw As New System.ComponentModel.BackgroundWorker


This is the code.  There are 13 separate processes called that perform different calculations.  All results are stored in lists.  At the end, I call the process to transfer the info to DGV:

        Dim thisNPMarginal As New NP_Marginal
        Dim SecondNPMarg As Boolean = False
        Newspaper_Marginals(thisNPMarginal, SecondNPMarg)

        Dim thisRAMarginal As New RA_Marginal
        Dim SecondRAMarg As Boolean = False
        Radio_Marginals(thisRAMarginal, SecondRAMarg)

        Dim thisTVMarginal As New TV_Marginal
        Dim SecondTVMarg As Boolean = False
        TV_Marginals(thisTVMarginal, SecondTVMarg)

        Dim thisMTMarginal As New MT_Marginal
        Dim SecondMTMarg As Boolean = False
        MT_Marginals(thisMTMarginal, SecondMTMarg)

        Dim thisMMMarginal As New MM_Marginal
        Dim SecondMMMarg As Boolean = False
        MM_Marginals(thisMMMarginal, SecondMMMarg)

        Dim thisINMarginal As New IN_Marginal
        Dim SecondINMarg As Boolean = False
        IN_Marginals(thisINMarginal, SecondINMarg)

        Dim thisECMarginal As New EC_Marginal
        Dim SecondECMarg As Boolean = False
        EC_Marginals(thisECMarginal, SecondECMarg)

        Dim thisDGMarginal As New DG_Marginal
        Dim SecondDGMarg As Boolean = False
        DG_Marginals(thisDGMarginal, SecondDGMarg)

        Dim thisEQMarginal As New EQ_Marginal
        Dim SecondEQMarg As Boolean = False
        EQ_Marginals(thisEQMarginal, SecondEQMarg)

        Dim thisESMarginal As New ES_Marginal
        Dim SecondESMarg As Boolean = False
        ES_Marginals(thisESMarginal, SecondESMarg)

        Dim thisTXTMarginal As New TXT_Marginal
        Dim SecondTXTMarg As Boolean = False
        TXT_Marginals(thisTXTMarginal, SecondTXTMarg)

        Dim thisGSMarginal As New GS_Marginal
        Dim SecondGSMarg As Boolean = False
        GS_Marginals(thisGSMarginal, SecondGSMarg)

        Dim thisHHIMarginal As New HHI_Marginal
        Dim SecondHHIMarg As Boolean = False
        HHI_Marginals(thisHHIMarginal, SecondHHIMarg)

        Populate_MarginalDGV(thisNPMarginal, thisRAMarginal, thisTVMarginal, thisMTMarginal,
                             thisMMMarginal, thisINMarginal, thisECMarginal, thisDGMarginal, thisEQMarginal,
                             thisESMarginal, thisTXTMarginal, thisGSMarginal, thisHHIMarginal)


This is the code for the process I call to load the datagridview.  So I *think* this is the part I need to figure out how to do from backgroundworker OR should I pass the values I need back to the main thread and do it there?

    Private Sub Populate_MarginalDGV(ByVal thisNPMarginal, ByVal thisRAMarginal, ByVal thisTVMarginal, ByVal thisMTMarginal, ByVal thisMMMarginal, _
                                     ByVal thisINMarginal, ByVal thisECMarginal, ByVal thisDGMarginal, ByVal thisEQMarginal, ByVal thisESMarginal, _
                                     ByVal thisTXTMarginal, ByVal thisGSMarginal, ByVal thisHHIMarginal)


        dgv_MARGINALS.Rows.Add("1", thisNPMarginal.NP1, thisRAMarginal.RA1, thisTVMarginal.TV1, thisMTMarginal.MT1, _
                             thisMMMarginal.MM1, thisINMarginal.IN1, thisECMarginal.EC1, thisDGMarginal.DG1, _
                             thisEQMarginal.EQ1, thisESMarginal.ES1, thisTXTMarginal.TXT1, thisGSMarginal.GS1, thisHHIMarginal.HHI1)
        dgv_MARGINALS.Rows.Add("2", thisNPMarginal.NP2, thisRAMarginal.RA2, thisTVMarginal.TV2, thisMTMarginal.MT2, _
                                     thisMMMarginal.MM2, thisINMarginal.IN2, thisECMarginal.EC2, thisDGMarginal.DG2, _
                                     thisEQMarginal.EQ2, thisESMarginal.ES2, thisTXTMarginal.TXT2, thisGSMarginal.GS2, thisHHIMarginal.HHI2)
        dgv_MARGINALS.Rows.Add("3", thisNPMarginal.NP3, thisRAMarginal.RA3, thisTVMarginal.TV3, thisMTMarginal.MT3, _
                                     thisMMMarginal.MM3, thisINMarginal.IN3, thisECMarginal.EC3, thisDGMarginal.DG3, _
                                     thisEQMarginal.EQ3, thisESMarginal.ES3, thisTXTMarginal.TXT3, thisGSMarginal.GS3, thisHHIMarginal.HHI3)
        dgv_MARGINALS.Rows.Add("4", thisNPMarginal.NP4, thisRAMarginal.RA4, thisTVMarginal.TV4, thisMTMarginal.MT4, _
                                     thisMMMarginal.MM4, thisINMarginal.IN4, thisECMarginal.EC4, thisDGMarginal.DG4, _
                                     thisEQMarginal.EQ4, thisESMarginal.ES4, thisTXTMarginal.TXT4, thisGSMarginal.GS4, thisHHIMarginal.HHI4)
        dgv_MARGINALS.Rows.Add("5", thisNPMarginal.NP5, thisRAMarginal.RA5, thisTVMarginal.TV5, thisMTMarginal.MT5, _
                                     thisMMMarginal.MM5, thisINMarginal.IN5, thisECMarginal.EC5, thisDGMarginal.DG5, _
                                     thisEQMarginal.EQ5, thisESMarginal.ES5, thisTXTMarginal.TXT5, thisGSMarginal.GS5, thisHHIMarginal.HHI5)

        With dgv_MARGINALS
            .Enabled = True
            .AlternatingRowsDefaultCellStyle.BackColor = Color.LightBlue
            .Columns(0).Width = 25
            .Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(5).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(6).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(7).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(8).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(9).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(10).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(11).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(12).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
            .Columns(13).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
        End With

    End Sub


I have 13 custom classes (each with 5 variables) and a list for each class.  All are defined globally and store the data for the DGV:

  Private Class NP_Marginal
        Public NP1 As String = "--"
        Public NP2 As String = "--"
        Public NP3 As String = "--"
        Public NP4 As String = "--"
        Public NP5 As String = "--"
    End Class

    Private Class RA_Marginal
        Public RA1 As String = "--"
        Public RA2 As String = "--"
        Public RA3 As String = "--"
        Public RA4 As String = "--"
        Public RA5 As String = "--"
    End Class

    Private Class TV_Marginal
        Public TV1 As String = "--"
        Public TV2 As String = "--"
        Public TV3 As String = "--"
        Public TV4 As String = "--"
        Public TV5 As String = "--"
    End Class

    Private Class MT_Marginal
        Public MT1 As String = "--"
        Public MT2 As String = "--"
        Public MT3 As String = "--"
        Public MT4 As String = "--"
        Public MT5 As String = "--"
    End Class

    Private Class MM_Marginal
        Public MM1 As String = "--"
        Public MM2 As String = "--"
        Public MM3 As String = "--"
        Public MM4 As String = "--"
        Public MM5 As String = "--"
    End Class

    Private Class IN_Marginal
        Public IN1 As String = "--"
        Public IN2 As String = "--"
        Public IN3 As String = "--"
        Public IN4 As String = "--"
        Public IN5 As String = "--"
    End Class

    Private Class EC_Marginal
        Public EC1 As String = "--"
        Public EC2 As String = "--"
        Public EC3 As String = "--"
        Public EC4 As String = "--"
        Public EC5 As String = "--"
    End Class

    Private Class DG_Marginal
        Public DG1 As String = "--"
        Public DG2 As String = "--"
        Public DG3 As String = "--"
        Public DG4 As String = "--"
        Public DG5 As String = "--"
    End Class

    Private Class EQ_Marginal
        Public EQ1 As String = "--"
        Public EQ2 As String = "--"
        Public EQ3 As String = "--"
        Public EQ4 As String = "--"
        Public EQ5 As String = "--"
    End Class

    Private Class ES_Marginal
        Public ES1 As String = "--"
        Public ES2 As String = "--"
        Public ES3 As String = "--"
        Public ES4 As String = "--"
        Public ES5 As String = "--"
    End Class

    Private Class TXT_Marginal
        Public TXT1 As String = "--"
        Public TXT2 As String = "--"
        Public TXT3 As String = "--"
        Public TXT4 As String = "--"
        Public TXT5 As String = "--"
    End Class

    Private Class GS_Marginal
        Public GS1 As String = "--"
        Public GS2 As String = "--"
        Public GS3 As String = "--"
        Public GS4 As String = "--"
        Public GS5 As String = "--"
    End Class

    Private Class HHI_Marginal
        Public HHI1 As String = "--"
        Public HHI2 As String = "--"
        Public HHI3 As String = "--"
        Public HHI4 As String = "--"
        Public HHI5 As String = "--"
    End Class

    Private NPMarginalList As New List(Of NP_Marginal)
    Private RAMarginalList As New List(Of RA_Marginal)
    Private TVMarginalList As New List(Of TV_Marginal)
    Private MTMarginalList As New List(Of MT_Marginal)
    Private MMMarginalList As New List(Of MM_Marginal)
    Private INMarginalList As New List(Of IN_Marginal)
    Private ECMarginalList As New List(Of EC_Marginal)
    Private DGMarginalList As New List(Of DG_Marginal)
    Private EQMarginalList As New List(Of EQ_Marginal)
    Private ESMarginalList As New List(Of ES_Marginal)
    Private TXTMarginalList As New List(Of TXT_Marginal)
    Private GSMarginalList As New List(Of GS_Marginal)
    Private HHIMarginalList As New List(Of HHI_Marginal)

Any help is greatly appreciated!!! It's making me crazy!

If someone could show me how to populate one row I could figure out the rest.

I've been moving so many things around in my program, I'm afraid I'm going to break it and forget how to

put it back...

TIA!!!

Joni


解决方案

Hello Joni,

I have two different patterns, neither load the DataGridView from classes, instead one utilizes a backend database, loads rows into the DataGridView via a DataTable while the other through a class instance.

The first mentioned above uses a CancellationTokenSource together with a Delegate to load data. Shown in the image below the load button (the code can be placed say in form load) loads data asynchronously in the the app remains responsive and the cancel button permits pausing the load or completely cancelling the load (this could in you code logic also rather than a button). 

The second one uses a splash screen (could also be done in form load or form shown), behind the covers I use an Iterator in tangent with Yield.

Full source is here and as mentioned above does not exactly match what you have shown but may very well prompt for adapting to your issue.

https://code.msdn.microsoft.com/Populate-DataGridView-via-a3ede35a?redir=0


这篇关于使用BackGroundWorker内部的值更新DataGridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆