这是我的功能 . 进度条仅在方法readFile.Read运行后运行 . 多数民众赞成,但这意味着当readFile.Read运行时,我的应用程序看起来像冻结了 . 有没有办法让它在我的方法运行时运行?我不能把它放在前面,好像进度条已经完成而任务没有完成,用户可能会关闭应用程序 .
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
var backgroundWorker = sender as BackgroundWorker;
backgroundWorker.WorkerReportsProgress = true;
var counter = FileCount / 100;
var files = System.IO.Directory.GetFiles(Input);
FileCount = files.Count();
for (int i = 0; i < FileCount; i++)
{
readFile.Read(files[i], Dictionary, Output);
backgroundWorker.ReportProgress(((i+1)*100)/FileCount);
}
}
private void backgroundWorker_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
// Change the value of the ProgressBar to the BackgroundWorker progress.
ProgressBar.Value = e.ProgressPercentage;
}
另外,有没有办法发布我的c#应用程序而无需用户安装它?我找到了一个似乎在调试/发布文件夹中运行良好的exe,但是我真的需要所有文件吗?在Java中,我能够创建独立的可执行文件而无需用户安装它 . 我也可以在这里做吗?
2 回答
如果您的.Net版本支持
System.Threading.Tasks
,我会将该方法重构为异步 . 然后,您可以使用async
和await
关键字来保持UI响应并以与程序同步时相同的方式更新ProgressBar
. 这样的事情应该有效:关于部署应用程序,不需要,您不必使用安装程序 . 您需要将所有
.exe
文件和相关的.dll
文件复制到每个客户端工作站 . 您还必须知道您的客户可能没有安装正确版本的.Net . 使用安装程序可以大大简化此过程 .如果你试图让它一步一步,确保将其步数设置为100.然后如果它正在处理数据,则采用正在处理的记录数并除以100.现在每次程序迭代超过1 / 100记录电话
并确保它有时间更新没有线程锁定的地方
在它上面 .