我有一个课程,我的所有方法都已实施,完成工作等。 然后我有我的Form1 - 我有一个FileSystemWatcher组件和一些按钮\复选框实例。
我一直在阅读有关BackgroundWorker,ProgressBar的内容,但我无法确定应该实施哪些内容以显示进度。
由于.cs文件(我的类)中的“一切都发生了”,有没有办法显示其输出? FileSystemWatcher如何与它进行交互(一切都在我调用watch方法之后发生 - 之前没有做任何事情)。
例如: 在我的课上,我有一个读取文件的功能,然后是另一个将这些文件转换为XML的功能。我想显示每个被readed文件的进度,然后转换每个文件。当我有一个控制台应用程序(找到一个完成它的工作的方法)时我完成了它但我无法理解如何在WinForm应用程序上实现它。
如果所有内容都在Form1.cs代码中,那么确保它会更容易。我试图制作一个“样本”,因为我原来的代码太大了。
代码示例:
public class Foo
{
//foo vars and methods...
}
然后,表单方法
public partial class Form1 : Form
{
private Foo prg;
public Form1()
{
InitializeComponent();
prg = new Foo();
prg.LoadConfig();
FillTextBox();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
//Do some checkbox verifications....
//after verification is done calls the Watcher (ProgramProcessing)
prg.ProgramProcessing(textBox1.Text);
}
我想要的是显示基于此观察者的进度条。一切都在他被触发后发生。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// do some long-winded process here
// this is executed in a separate thread
int maxOps = 1000000;
for (int i = 0; i < maxOps; i++)
{
rtbText.AppendText(i.ToString() + "\r\n");
// report progress as a percentage complete
bgWorker.ReportProgress(100 * i / maxOps);
}
}
private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// update the progress bar
pbProgress.Value = e.ProgressPercentage;
}
private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// return to "normal" mode of operation
this.Cursor = Cursors.Default;
//btnGo.Enabled = true;
}
答案 0 :(得分:1)
如果要使用最新的.NET库,可以使用IProgress接口,基本上只需调用IProgress.Report()。此接口将为您节省代码行,以使用BackgroundWorker实现必要的事件处理程序。
https://msdn.microsoft.com/en-us/library/hh138298(v=vs.110).aspx