小编Lov*_*All的帖子

从BackgroundWorker调用方法

我讨厌我的第一个问题似乎已被多次回答,但我仍然很难理解如何使用BackgroundWorker调用方法.

我正在使用一系列类和方法处理一个非常大的文本文件.用户选择工具条项后,整个过程开始.顺便说一下,它是这样的:

  • 用户选择工具条项
  • 用户通过对话框选择要处理的文件
  • 行动开始了

从用户弹出初始对话框的那一刻起,我想我可以将所有内容都包装到BackgroundWorker中,但我现在要做的就是将所有繁重工作的方法放入其自己的BackGroundWorker实例中.我也会添加一个ProgressBar,但是如果我能够让BackgroundWorker进程滚动,我想我可以处理它.

从顶部开始(伪代码用于示例目的.为简洁起见省略了许多内容):

private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
     string fileName = openSingleFile.FileName;
     processFile(fileName); 
}

static public void processFile(string fileName)
{
// many vars/loops exist but not shown

    foreach (data in bigData)
    {
        processItem(stringA, stringB); // <-- this method is where the expensive work is done 
        x++; 
    }  
} 
Run Code Online (Sandbox Code Playgroud)

我创建了一个BackgroundWorker实例...:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // Things go here
}
Run Code Online (Sandbox Code Playgroud)

...我已经尝试了很多东西来列出,所以我回到了上面的演示文稿的开头.

如果我了解BackgroundWorker,我需要执行以下操作:

  • 用上面的代码替换上面代码中的processItem(stringA,stringB):

    backgroundWorker1.RunWorkerAsync(processItem(stringA, stringB));

...然后做一些类型的DoWork呼叫?...然后进行某种类型的RunWorkerCompleted调用?

不知道为什么我的大脑会冻结,但是我花了很多时间在这上面并没有结果,我很尴尬.任何帮助将不胜感激.没有StackOverflow,我很久以前就会成为DOA.

仅供参考:我已经引用了其他SO帖子,MSDN和DotNetPerls示例.我想,我只是在概念上遗漏了一些东西.

c# backgroundworker

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

backgroundworker ×1

c# ×1