我有一个用于刷新标签文本的类:
class GUIDisplayer:IOutputter
{
Label label;
public GUIDisplayer(Label label)
{
this.label = label;
}
public void display(string text)
{
label.Text = text;
label.Refresh();
}
}
此类的一个实例被传递到我的Windows窗体应用程序中的另一个类,我在其中使用它来显示For循环期间的进度:
public class BatchConverter
{
IOutputter outputter;
public BatchConverter(IOutputter outputter)
{
this.outputter = outputter;
}
public bool convertFiles(List<FileTransferData> fileTransferList,bool overwrite=true)
{
for (int index = 0; index < fileTransferList.Count; index++)
{
FileTransferData file = fileTransferList[index];
outputter.display(index + "/" + fileTransferList.Count + ": " + file.sourcePath);
//do some file conversion operations
}
return true;
}
}
当convertFiles()
正在运行时,标签会在第一次调用outputter.display()
时更新,但随后该应用只会冻结蓝色忙圈,直到完成For循环。当我使用outputter.display()
实现IOutputter.display()
方法时,For循环使用Console.WriteLine()
调用成功写入输出设备。我希望每次For循环迭代时标签中的文本都会刷新;我有办法做到这一点吗?