C#帮助填充DataGridView的BackGroundWorker进程的基本教学示例

Rog*_*ger 5 c# backgroundworker

场景:

我有一个窗口表单,其中包含DataGridWiew3个预定义列.我在函数外部声明了3个变量并分配到函数内部.我有一个枚举东西的函数,并将它放在3列中,逐行:

string VARIABLE1;
string VARIABLE2;
string VARIABLE3;

private void FunctionEnumerateStuff()
{
    foreach (StuffObject STUFF in StuffCollection)
    {
       VARIABLE1 = STUFF.SubStuff1.ToString();
       VARIABLE2 = STUFF.SubStuff2.ToString();
       VARIABLE3 = STUFF.SubStuff3.ToString();
       DatagridWiew1.Rows.Add(VALUE1, VALUE2, VALUE3); 
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是从一个BackGroundWorker进程执行这个功能,这样应用程序的GUI将是平滑和响应的.我已经阅读了背景工作者,但我遇到了麻烦,因为所有的例子似乎都是完全不同的情况,而且大多数情况都非常复杂.

一些有用的教育灵魂可以帮助我和其他人有一个非常基本的例子,说明如何以最简单的方式使其工作.谢谢.

Hen*_*man 1

我会使用这样的东西(非常粗略且未经测试):

  private void bgw_DoWork(object sender, DoWorkEventArgs e)
    {
        var list = new List<SomeRowType>();

        foreach (StuffObject STUFF in StuffCollection)
        {
            VARIABLE1 = STUFF.SubStuff1.ToString();
            VARIABLE2 = STUFF.SubStuff2.ToString();
            VARIABLE3 = STUFF.SubStuff3.ToString();
            //DatagridWiew1.Rows.Add(VALUE1, VALUE2, VALUE3);
            list.Add(new SomeRowType(VALUE1, VALUE2, VALUE3));  //probably meant: VARIABLEn
        }
        e.Result = list;
    }

    private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (e.Error != null)
        {
        }
        else
        {
            var list = (List<SomeRowType>)e.Result;
            DatagridWiew1.DataSource = list;
        }
    }
Run Code Online (Sandbox Code Playgroud)