C# 从其他类访问后台工作程序
我在Windows窗体应用程序中将逻辑从一个类分离到另一个类。当所有的都在一个类中时,它工作得很好,但是我现在将逻辑转移到它自己的各个类中。从另一个班级找后台工作人员有一些问题 我在A班上课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
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();