Halloj! Vad jag kan se så ligger väl problemet i DownloadFileAsync eftersom "WebClient har inte stöd för samtidiga I/O-åtgärder.". Dvs WC kan inte skriva flera filer samtidigt till hårddisken.Återanvända objekt?
Håller på att bygga en uppdateringssnurra till en applikation jag har. Denna tankar hem diverse
filer från en angiven webbplats och uppdaterar på så sätt applikationen (olika dll-er, några rpt filer o s v).
Jag får dock inte riktigt någon kläm på det hela.
Jag importerar följande:
<code>
Imports System.IO
Imports System.Net
Imports System.ComponentModel
</code>
Sen har jag en loop och anropar:
<code>
DownloadFile(servername, localname)
</code>
för varje fil jag vill ladda ner och placera lokalt.
Downloadfile ser ut som följer:
<code>
Private Sub DownloadFile(ByVal servername As String, ByVal localname As String)
AddHandler wcu.DownloadProgressChanged, AddressOf ProgressChanged
AddHandler wcu.DownloadFileCompleted, AddressOf DownloadFileCompleted
Me.pbProgress.Value1 = 0
Me.pbProgress.Text = "Hämtar " & servername
wcu.DownloadFileAsync(New Uri("http://www.servernamn.net/uppdateringar/nya/" & servername), IO.Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly.Location) + "\" & localname)
End Sub
Private Sub ProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs)
pbProgress.Value1 = e.ProgressPercentage
End Sub
Private Sub DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
pbProgress.Value1 = 100
pbProgress.Text = "Klar!"
End Sub
</code>
Av någon, för mig, okänd anledning så vägrar den dock att köra DownloadFile mer än en gång.
Första filen kommer ner som den ska, men sen tar det fetstopp och jag får upp en felruta enligt följande:
<code>
Information om att aktivera JIT-felsökning i stället för den
här dialogrutan finns i slutet av det här meddelandet.
************** Undantagstext **************
System.NotSupportedException: WebClient har inte stöd för samtidiga I/O-åtgärder.
vid System.Net.WebClient.ClearWebClientState()
vid System.Net.WebClient.DownloadFileAsync(Uri address, String fileName, Object userToken)
vid System.Net.WebClient.DownloadFileAsync(Uri address, String fileName)
vid TestApp.dlgDownloader.DownloadFile(String servername, String localname)
vid TestApp.dlgDownloader.dlgDownloader_Load(Object sender, EventArgs e)
vid System.Windows.Forms.Form.OnLoad(EventArgs e)
vid System.Windows.Forms.Form.OnCreateControl()
vid System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
vid System.Windows.Forms.Control.CreateControl()
vid System.Windows.Forms.Control.WmShowWindow(Message& m)
vid System.Windows.Forms.Control.WndProc(Message& m)
vid System.Windows.Forms.ScrollableControl.WndProc(Message& m)
vid System.Windows.Forms.ContainerControl.WndProc(Message& m)
vid System.Windows.Forms.Form.WmShowWindow(Message& m)
vid System.Windows.Forms.Form.WndProc(Message& m)
vid System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
vid System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
vid System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
</code>
Någon som vet varför den gör på detta vis?
//JohannesSv: Återanvända objekt?
Testa med DownloadFile istället så kommer det säkert fungera.
Thomas