use*_*681 6 c# sharpziplib icsharpcode
我是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, "");
}
现在,我将向您展示递归调用过程:
Run Code Online (Sandbox Code Playgroud)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(); }
Run Code Online (Sandbox Code Playgroud)private void UpdateDetail(string masterConfig, string category) { IUpdate worker = new HP.ActiveCheckLocalMode.UpdateEngine.UpdateManager(); worker.UpdateApp(masterConf); }
Run Code Online (Sandbox Code Playgroud)private void UpdateDetail(string masterConfig, UpdateCategory cat) { UpdateThread updateThread = new UpdateThread(this, cat); updateThread.MasterConfig = masterConfig; updateThread.ThreadProc(); }
这是调用过程.当我第二次点击更新按钮时,会抛出异常,你能帮帮我吗?非常感谢你.
在第二次开始之前第一个任务线程是否已完成?
我想象 File.Delete() 和 SharpZipLib 中的一些项目不能很好地响应多线程同时将同一文件夹压缩到同一文件。
将该“UpdateThread updateThread”提升为“ActiveCheckManager”类的私有成员,然后在创建新线程之前检查它是否已从先前的单击中运行。
| 归档时间: | 
 | 
| 查看次数: | 1483 次 | 
| 最近记录: |