Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从其他类访问后台工作程序_C#_Visual Studio 2015_Backgroundworker - Fatal编程技术网

C# 从其他类访问后台工作程序

C# 从其他类访问后台工作程序,c#,visual-studio-2015,backgroundworker,C#,Visual Studio 2015,Backgroundworker,我在Windows窗体应用程序中将逻辑从一个类分离到另一个类。当所有的都在一个类中时,它工作得很好,但是我现在将逻辑转移到它自己的各个类中。从另一个班级找后台工作人员有一些问题 我在A班上课 public partial class ClassA : Form BackgroundWorker essentialBgWorker = new BackgroundWorker(); public ClassA() { InitializeC

我在Windows窗体应用程序中将逻辑从一个类分离到另一个类。当所有的都在一个类中时,它工作得很好,但是我现在将逻辑转移到它自己的各个类中。从另一个班级找后台工作人员有一些问题

我在A班上课

public partial class ClassA : Form
    BackgroundWorker essentialBgWorker = new BackgroundWorker();

    public ClassA()
        {
            InitializeComponent();
            //essentialBgWorker
            essentialBgWorker.DoWork += new DoWorkEventHandler(essentialBgWorker_DoWork);
            essentialBgWorker.ProgressChanged += new ProgressChangedEventHandler(essentialBgWorker_ProgressChanged);
            essentialBgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(essentialBgWorker_RunWorkerCompleted);
            essentialBgWorker.WorkerReportsProgress = true;
        }
这是一个表单,它有一个按钮,单击该按钮时,会将文件复制到另一个目录

private void copyButton_Click(object sender, EventArgs e)
{
    clickedButton = ((Button)sender).Name.ToString();
    itemsChanged = ((Button)sender).Text.ToString();
    essentialBgWorker.RunWorkerAsync();
}
这将运行后台工作程序:

public void essentialBgWorker_DoWork(object sender, DoWorkEventArgs e)
{
    string buttonSender = clickedButton; //copyButton, deleteButton, etc.
    switch (buttonSender)
    {
        case "copyButton":
            //this is pseudocode - the important part being that this is where I would call the method from the other class
            ClassB.copyDocuments();
            break;
        case "deleteButton":
            //this is pseudocode - the important part being that this is where I would call the method from the other class
            ClassB.deleteDocuments();
            break;
        default:
            essentialBgWorker.CancelAsync();
            break;
    }
}
在我的另一个类(
ClassB
)中,对于这个示例,我有一个在单击按钮时调用的方法(应该处理逻辑)

public void copyDocuments()
{
ClassA ClassA=新的ClassA();
//
//处理复制文件的逻辑
//获取文件计数!
//向后台工作人员报告
int totalFileCount=fileCount;
int total=totalFileCount;//传输的内容总数

对于(int i=0;i您必须将公共修饰符添加到essentialBgWorker

public BackgroundWorker essentialBgWorker = new BackgroundWorker();

“EssentialgWorker”是公共的吗?如果是的话,确保它不是静态的。你能在classA中添加EssentialgWorker的声明吗?用ClassABam中工作人员的声明更新了代码,工作起来很有魅力。我想这很简单!!半相关-但classA是一种形式(如你所见);当前,当ClassA在ClassB中实例化时,它会在执行工作时加载一个辅助表单。有没有办法防止这种情况发生?您需要ClassA成为表单吗?实际上,我设计了表单(ClassA)然后编写所有代码,使其在该类中工作。现在我正在尝试“清理”它,并通过为所有内容提供适当的类使其更加标准化。我是否应该将后台工作人员移动到他们自己的非表单类?我只使用它们来更新进度条(我认为,由于它们与UI绑定,因此它们属于表单(ClassA),对吗?我能够找到它-我将表单传递给方法并以这种方式调用它。将其传递给:
ClassA.copyDocuments(this)
然后通过:
public void copyDocuments(ClassA ClassA)在类方法上获得它)
,然后我可以使用
classA.essentialBgWorker
访问它,它工作得很好。
public BackgroundWorker essentialBgWorker = new BackgroundWorker();