小编Kla*_*ner的帖子

在Windows窗体应用程序后台工作

我有以下星座:

MainForm.cs->包括我所有的表单元素

Program.cs->包括主体部分,它是一个xmlreader / writer,用于更改xml文件中的xml属性,该文件的大小可以达到4gb

所以这个小应用程序工作,但当然UI变得反应迟钝和冻结,我想避免的,我也希望能减少对道路这一过程的持续时间

我从BtnClick事件开始调用xmlread / write方法:

    void BtnApplyChangesClick(object sender, EventArgs e)
    {
        Program p = Program.Instance;
        pbApplyChanges.Minimum = 0;
        pbApplyChanges.Step = 1;

        Cursor.Current = Cursors.WaitCursor;
        foreach(DataGridViewRow cr in dataGridView2.Rows)
        {
            pbApplyChanges.Maximum = dataGridView2.Rows.Count;
            p.changeElements(cr.Cells["Filename"].Value.ToString(), txtTenant.Text, txtDate.Text, txtEvtId2.Text);
            pbApplyChanges.PerformStep();
        }
        Cursor.Current = Cursors.Arrow;
        MessageBox.Show("Job done");
    }
Run Code Online (Sandbox Code Playgroud)

在呼叫我用的Program.cs和我的主要方法有我的单一实例(changeElements)使用4字符串参数,可以说都是从信息的表格上当受骗!(我想这是有点不好的做法,但它迄今的工作...)

当我尝试用backgroundWorker替换此方法调用时(它自己进行了方法调用),我失败了,因为甚至没有进行方法调用...我发现无法从BW线程访问UI元素,因此我想这也是不工作我的方法调用的原因?

那么,如何能得到这个星座的工作?我是否必须将所有4个字符串参数和(Program.cs的)类实例传递给后台工作人员?是BW即使是工作的最佳工具?

c# backgroundworker winforms

-1
推荐指数
1
解决办法
6661
查看次数

标签 统计

backgroundworker ×1

c# ×1

winforms ×1