C# 什么';我的应用程序有问题——大小是0,但我希望是46806!

C# 什么';我的应用程序有问题——大小是0,但我希望是46806!,c#,sharpziplib,icsharpcode,C#,Sharpziplib,Icsharpcode,我是一名C#程序员 现在,我正在使用ICSharpCode.SharpZipLib.dll在当前项目中创建一个zip文件。但我突然想到,当我第二次单击按钮执行创建zip文件的函数时,应用程序将抛出一个异常,友好且严肃地告诉我“大小为零,但我预期为46086” 我很困惑,我想知道为什么?当我第一次单击按钮时,我可以成功地完成它而不会出现任何错误 我的相关代码如下: internal void ThreadProc() { try { ZipHelper.Create

我是一名C#程序员

现在,我正在使用ICSharpCode.SharpZipLib.dll在当前项目中创建一个zip文件。但我突然想到,当我第二次单击按钮执行创建zip文件的函数时,应用程序将抛出一个异常,友好且严肃地告诉我“大小为零,但我预期为46086”

我很困惑,我想知道为什么?当我第一次单击按钮时,我可以成功地完成它而不会出现任何错误

我的相关代码如下:

internal void ThreadProc()
{
    try
    {
        ZipHelper.CreateZip(backupZipFile, Constants.HomeConstant, true);

        // do other things
    }

}
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, "");
}
CreateZip()函数的实现如下:

internal void ThreadProc()
{
    try
    {
        ZipHelper.CreateZip(backupZipFile, Constants.HomeConstant, true);

        // do other things
    }

}
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, "");
}
现在,我将向您展示递归调用过程:

  • 在“ActiveCheckManager”类中调用方法“UpdateAppAsync”
  • 异步调用UpdateApp函数,在UpdateApp方法中,它只简单地调用UpdateDetail函数
  • worker.UpdateApp将仅调用UpdateDetail(字符串,UpdateCategory)

  • 这就是呼叫过程。当我第二次点击更新按钮时,它会抛出一个异常,你能帮我吗?非常感谢。

    第一个任务线程在第二次开始之前完成了吗

    我会想象File.Delete()和SharpZipLib中的某些项不会对多线程同时将同一文件夹压缩到同一文件做出良好响应


    将“UpdateThread UpdateThread”提升为“ActiveCheckManager”类的私有成员,然后在创建新线程之前检查它是否已从上一次单击中运行。

    引发异常的原因是什么(即:哪一行实际中断)?堆栈跟踪可能会有所帮助。可能您需要处理某些内容,或者关闭zip文件。异常的类型是什么?您好,Radu094,是的,在我开始第二次单击之前,第一个任务线程已经完成。我将使用FastZip将指定目录下的文件和目录(即“C:\Program files\ABC\DEF”)压缩到目标目录,即“C:\DOCUME~1\youz\LOCALS~1\Temp”。因此,File.Delete()用于删除临时文件中上次完成一半的zip文件。然后我尝试将updateThread局部变量升级为对象全局变量,它也会引发相同的异常。发生了什么?我应该在执行任务后终止线程吗?
    private void UpdateDetail(string masterConfig, UpdateCategory cat)
    {
        UpdateThread updateThread = new UpdateThread(this, cat);
        updateThread.MasterConfig = masterConfig;
        updateThread.ThreadProc();
    }