2

私は次のコードを取得しました:

        string path = Environment.CurrentDirectory;
    private void button1_Click(object sender, EventArgs e)
    {
        using (ZipFile zip = ZipFile.Read("Fringe.S03E07.HDTV.XviD-LOL.zip"))
        {
            zip.ExtractProgress += ExtractProgress;
            foreach (ZipEntry file in zip)
            {
                file.Extract(path+"\\temp", ExtractExistingFileAction.OverwriteSilently);
            }
        }  

    }

    public void ExtractProgress(object sender, ExtractProgressEventArgs e)
    {
        if (e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten)
        {
            //bytes transfered of current file
            label4.Text = e.BytesTransferred.ToString();
        }
        else if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry)
        {
            //filename of current extracted file
            label2.Text = e.CurrentEntry.FileName;
        }
    }

ボタンをクリックすると、フォームが動かなくなります。ExtractProgressをバックグラウンドワーカーとして作成したいのですが、ExtractProgress関数にはExtractProgressEventArgs eが必要であり、backgroundworker_dowork関数にはDoWorkEventArgs eが必要なため、関数をbackgroundworker関数に変換する方法がわかりません。

誰かが私がそれを変換するのを手伝ってくれるか、私に別の解決策を与えることができれば、それは素晴らしいことです!

4

1 に答える 1

1

シンプル:すべてのコードをメソッドにbutton1_Click入れ、button1_Clickそのメソッドをで実行しBackgroundWorkerます。それを試して、それがどのように機能するかを確認してください。

于 2010-12-01T17:51:56.400 に答える