我是C#程序员。
现在,我正在使用 ICSharpCode.SharpZipLib.dll 在我当前的项目中创建一个zip文件。但是我发现,当我点击 SECOND TIME 按钮执行一个函数来创建一个zip文件时,应用程序会抛出异常,友好而且认真告诉我“大小为零,但我期待46086“。
我很困惑,我想知道为什么?当我第一次点击按钮时,我可以成功完成,没有任何错误。
我的相关代码如下:
internal void ThreadProc()
{
try
{
ZipHelper.CreateZip(backupZipFile, Constants.HomeConstant, true);
// do other things
}
}
CreateZip()函数的实现如下:
public static void CreateZip(string zipFileName, string sourceDirectory, bool recurse)
{
FastZip zip = new FastZip();
if (File.Exists(zipFileName))
{
File.Delete(zipFileName);
}
zip.CreateZip(zipFileName, sourceDirectory, true, "");
}
现在,我将向您展示递归调用过程:
public void UpdateAppAsync(string masterConfig) { this.masterConf = masterConfig; Thread actualThread = new Thread(new ThreadStart(UpdateApp)); actualThread.IsBackground = true; actualThread.CurrentCulture = Thread.CurrentThread.CurrentCulture; actualThread.CurrentUICulture = Thread.CurrentThread.CurrentUICulture; actualThread.Start(); }
private void UpdateDetail(string masterConfig, string category) { IUpdate worker = new HP.ActiveCheckLocalMode.UpdateEngine.UpdateManager(); worker.UpdateApp(masterConf); }
private void UpdateDetail(string masterConfig, UpdateCategory cat) { UpdateThread updateThread = new UpdateThread(this, cat); updateThread.MasterConfig = masterConfig; updateThread.ThreadProc(); }
这是调用过程。当我第二次点击更新按钮时,会抛出异常,你能帮帮我吗?非常感谢你。
答案 0 :(得分:1)
在第二次开始之前,第一个任务线程是否已完成?
我认为File.Delete()和SharpZipLib中的一些项目不能以多线程方式同时将同一个文件夹压缩到同一个文件中。
将“UpdateThread updateThread”提升为“ActiveCheckManager”类的私有成员,然后在创建新线程之前检查它是否已经从之前的单击运行。