Make sure to dispose stuffs
This commit is contained in:
parent
8161d1440a
commit
a912197056
@ -59,11 +59,7 @@ namespace ShareX.HelpersLib
|
||||
public IWebProxy Proxy { get; set; }
|
||||
public string AcceptHeader { get; set; }
|
||||
|
||||
public event EventHandler FileSizeReceived;
|
||||
public event EventHandler DownloadStarted;
|
||||
public event EventHandler ProgressChanged;
|
||||
public event EventHandler DownloadCompleted;
|
||||
public event EventHandler ExceptionThrowed;
|
||||
public event EventHandler FileSizeReceived, DownloadStarted, ProgressChanged, DownloadCompleted, ExceptionThrowed;
|
||||
|
||||
private BackgroundWorker worker;
|
||||
private Stream stream;
|
||||
@ -84,11 +80,6 @@ namespace ShareX.HelpersLib
|
||||
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
|
||||
}
|
||||
|
||||
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
||||
{
|
||||
IsDownloading = false;
|
||||
}
|
||||
|
||||
public void StartDownload()
|
||||
{
|
||||
if (!IsDownloading && !string.IsNullOrEmpty(URL) && !worker.IsBusy)
|
||||
@ -123,10 +114,13 @@ namespace ShareX.HelpersLib
|
||||
}
|
||||
}
|
||||
|
||||
private void ThrowEvent(EventHandler eventHandler)
|
||||
{
|
||||
worker.ReportProgress(0, eventHandler);
|
||||
}
|
||||
|
||||
private void worker_DoWork(object sender, DoWorkEventArgs e)
|
||||
{
|
||||
HttpWebResponse response = null;
|
||||
|
||||
try
|
||||
{
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
|
||||
@ -138,65 +132,73 @@ namespace ShareX.HelpersLib
|
||||
request.Accept = AcceptHeader;
|
||||
}
|
||||
|
||||
response = (HttpWebResponse)request.GetResponse();
|
||||
FileSize = response.ContentLength;
|
||||
ThrowEvent(FileSizeReceived);
|
||||
|
||||
if (FileSize > 0)
|
||||
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
|
||||
{
|
||||
Stopwatch timer = new Stopwatch();
|
||||
Stopwatch progressEventTimer = new Stopwatch();
|
||||
long speedTest = 0;
|
||||
FileSize = response.ContentLength;
|
||||
|
||||
byte[] buffer = new byte[(int)Math.Min(bufferSize, FileSize)];
|
||||
int bytesRead;
|
||||
ThrowEvent(FileSizeReceived);
|
||||
|
||||
ThrowEvent(DownloadStarted);
|
||||
|
||||
while (DownloadedSize < FileSize && !worker.CancellationPending)
|
||||
if (FileSize > 0)
|
||||
{
|
||||
while (IsPaused && !IsCanceled)
|
||||
{
|
||||
timer.Reset();
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
Stopwatch timer = new Stopwatch();
|
||||
Stopwatch progressEventTimer = new Stopwatch();
|
||||
long speedTest = 0;
|
||||
|
||||
if (IsCanceled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
byte[] buffer = new byte[(int)Math.Min(bufferSize, FileSize)];
|
||||
int bytesRead;
|
||||
|
||||
if (!timer.IsRunning)
|
||||
using (stream)
|
||||
using (Stream responseStream = response.GetResponseStream())
|
||||
{
|
||||
timer.Start();
|
||||
}
|
||||
ThrowEvent(DownloadStarted);
|
||||
|
||||
if (!progressEventTimer.IsRunning)
|
||||
{
|
||||
progressEventTimer.Start();
|
||||
}
|
||||
while (DownloadedSize < FileSize && !worker.CancellationPending)
|
||||
{
|
||||
while (IsPaused && !IsCanceled)
|
||||
{
|
||||
timer.Reset();
|
||||
Thread.Sleep(10);
|
||||
}
|
||||
|
||||
bytesRead = response.GetResponseStream().Read(buffer, 0, buffer.Length);
|
||||
stream.Write(buffer, 0, bytesRead);
|
||||
DownloadedSize += bytesRead;
|
||||
speedTest += bytesRead;
|
||||
if (IsCanceled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (timer.ElapsedMilliseconds > 500)
|
||||
{
|
||||
DownloadSpeed = (double)speedTest / timer.ElapsedMilliseconds * 1000;
|
||||
speedTest = 0;
|
||||
timer.Reset();
|
||||
}
|
||||
if (!timer.IsRunning)
|
||||
{
|
||||
timer.Start();
|
||||
}
|
||||
|
||||
if (!progressEventTimer.IsRunning)
|
||||
{
|
||||
progressEventTimer.Start();
|
||||
}
|
||||
|
||||
bytesRead = responseStream.Read(buffer, 0, buffer.Length);
|
||||
stream.Write(buffer, 0, bytesRead);
|
||||
DownloadedSize += bytesRead;
|
||||
speedTest += bytesRead;
|
||||
|
||||
if (timer.ElapsedMilliseconds > 500)
|
||||
{
|
||||
DownloadSpeed = (double)speedTest / timer.ElapsedMilliseconds * 1000;
|
||||
speedTest = 0;
|
||||
timer.Reset();
|
||||
}
|
||||
|
||||
if (progressEventTimer.ElapsedMilliseconds > 100)
|
||||
{
|
||||
ThrowEvent(ProgressChanged);
|
||||
|
||||
progressEventTimer.Reset();
|
||||
}
|
||||
}
|
||||
|
||||
if (progressEventTimer.ElapsedMilliseconds > 100)
|
||||
{
|
||||
ThrowEvent(ProgressChanged);
|
||||
progressEventTimer.Reset();
|
||||
ThrowEvent(DownloadCompleted);
|
||||
}
|
||||
}
|
||||
|
||||
ThrowEvent(ProgressChanged);
|
||||
ThrowEvent(DownloadCompleted);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@ -204,14 +206,10 @@ namespace ShareX.HelpersLib
|
||||
if (!IsCanceled)
|
||||
{
|
||||
LastException = ex;
|
||||
|
||||
ThrowEvent(ExceptionThrowed);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (response != null) response.Close();
|
||||
if (stream != null) stream.Close();
|
||||
}
|
||||
}
|
||||
|
||||
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
|
||||
@ -224,9 +222,9 @@ namespace ShareX.HelpersLib
|
||||
}
|
||||
}
|
||||
|
||||
private void ThrowEvent(EventHandler eventHandler)
|
||||
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
|
||||
{
|
||||
worker.ReportProgress(0, eventHandler);
|
||||
IsDownloading = false;
|
||||
}
|
||||
}
|
||||
}
|
@ -175,7 +175,11 @@ namespace ShareX.UploadersLib
|
||||
{
|
||||
if (response != null)
|
||||
{
|
||||
response.GetResponseStream().CopyStreamTo(downloadStream, BufferSize);
|
||||
using (Stream responseStream = response.GetResponseStream())
|
||||
{
|
||||
responseStream.CopyStreamTo(downloadStream, BufferSize);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -243,7 +247,11 @@ namespace ShareX.UploadersLib
|
||||
requestStream.Write(bytesDataClose, 0, bytesDataClose.Length);
|
||||
}
|
||||
|
||||
result.Response = ResponseToString(request.GetResponse(), responseType);
|
||||
using (WebResponse response = request.GetResponse())
|
||||
{
|
||||
result.Response = ResponseToString(response, responseType);
|
||||
}
|
||||
|
||||
result.IsSuccess = true;
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -477,7 +485,8 @@ namespace ShareX.UploadersLib
|
||||
switch (responseType)
|
||||
{
|
||||
case ResponseType.Text:
|
||||
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
|
||||
using (Stream responseStream = response.GetResponseStream())
|
||||
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
|
||||
{
|
||||
return reader.ReadToEnd();
|
||||
}
|
||||
|
@ -132,7 +132,8 @@ namespace ShareX.UploadersLib.FileUploaders
|
||||
private UploadResult HandleDuplicate(HttpWebResponse httpResponse)
|
||||
{
|
||||
JToken response;
|
||||
using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
|
||||
using (Stream responseStream = httpResponse.GetResponseStream())
|
||||
using (StreamReader streamReader = new StreamReader(responseStream))
|
||||
{
|
||||
response = JToken.Parse(streamReader.ReadToEnd());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user