Right, ok. I think this is a misunderstanding of VB syntax and how to use the library.
The ZipProgressEventArgs is a type.
By using "dim zipevents as ZipProgressEventArgs" in your code, you are defining a variable named zipevents and tell the compiler that it is of a particular type (ZipProgressEventArgs). You don't assign a value, which means the variable has
a value of Nothing. You're getting an exception by referencing a field in that object, because the object is Nothing.
What you need to do is define a progress event. The way events work in .NET in general, is the way DotNetZip uses them. The method you call, ZipFile.Save(), will invoke YOUR code with progress updates, at various times as the save proceeds.
You need to provide a method, for ZipFile.Save() to call. That method is of type
EventHandler(Of ZipProgressEventArgs). And you need to provide it by setting the ZipFile.SaveProgress property.
There's VB code on that documentation page.
Now, you're using ASPNET, so I'm not sure how you will communicate that progress back to the requesting client browser. I don't know how the progressbar works with ASPNET, but I think it uses jQuery. And my understanding is the jQuery progressbar
needs to poll to the server to request progress updates. Therefore your code would have to stash the progress in its SaveProgress event, and then provide that stashed value if it receives a request for progress update from the browser. A little complicated.
And... depending on the size of the zip file, and the stream you save into, this save may be very quick. If you are saving to the filesystem, the save might take 2 seconds, even for a fairly large file. So, consider whether you're sure you want
the progress bar on the browser side to indicate save progress on the server side. The communication overhead alone may dwarf the time required to simply save the zip file, if you see what I mean.