Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Programm vor Absturz bewahren

Frage Entwicklung VB for Applications

Mitglied: carp-catcher

carp-catcher (Level 1) - Jetzt verbinden

15.03.2012 um 15:02 Uhr, 5398 Aufrufe, 19 Kommentare

Ich möchte vermeiden das sich mein Programm beim Datei Upload aufhängt.

hallo zusm,

ich habe ein Programm welches einen Datei Upload macht erstellt.
Soweit auch kein Problem.
[code]My.Computer.Network.UploadFile(bildpfad.Text, "ftp://.de/data/" & name_endung , "", "***") [/code]
Funktioniert auch super.
Problem liegt jetzt darin, wenn der User schlechtes Internet hat und im Programm rumklickt stürtzt es ab.
Kann man diesen Absturz vermeiden ?

Fals es keine Lösung gibt muss ich halt ein
Me.Hide()
und ein
Me.Show()
einbauen um das Programm vor dem Absturz zu bewahren.

Aber ich denke das geht auch eleganter

Ich bin fün r jedeTipp Dankbar


Greez carp
Mitglied: SlainteMhath
15.03.2012 um 15:48 Uhr
Moin,

was genau bedeutet denn
Programm [...] stürtzt [...] ab.
Fehlermeldung? Geht's einfach zu? BlueScreen?

Ohne den Code, die .NET Version oder gar die eingesetzte Programmiersprache zu kennen: Schon mal versucht ein bischen Errorhandling einzubauen?

lg,
Slainte
Bitte warten ..
Mitglied: MrTrebron
15.03.2012 um 15:57 Uhr
Hallo carp,

also ohne genaue Angabe der Programmiersprache schwierig da mehr zu sagen als Error Handling einbauen.
In .net
Try - Catch

Gruß
Norbert
Bitte warten ..
Mitglied: dan0ne
15.03.2012 um 16:16 Uhr
Hallo,

wie Trebon schon richtig sagt kann man dir ohne Angaben der Sprache nicht helfen. Ich bezweifel aber das der Absturz nur mit der Internetverbindung zu tun hat!

Gruss
Bitte warten ..
Mitglied: MrTrebron
15.03.2012 um 16:20 Uhr
@dan0ne

Jetzt mal so in die Glaskugel geschaut:
Der Upload steht in einer Sub oder Function, ohne Errorhandling.
Hinzu kommt das die Form bedienbar bleibt, ohne das er den Upload in einen Background Thread startet.
Wenn dann der User in der Form Buttons klickt oder andere Events auslöst während der Upload noch läuft knallt es.

Norbert
Bitte warten ..
Mitglied: SlainteMhath
15.03.2012 um 16:21 Uhr
Was vorstellbar wäre:
- "My.Computer.Network.UploadFile()" ist eine "blocking function"
- Wenn "das Internet schlecht ist" und der user "im Programm rumklickt"
Dann meint Windows "das Program reagiert nicht mehr"

Lösung wäre hier eine non-blocking Function zu benzutzen.

/EDIT: ah, MrTrebron war schneller
Bitte warten ..
Mitglied: carp-catcher
15.03.2012 um 16:27 Uhr
Programmiersprache ist vb.net
und upload ist in einer Funktion im Try-Catch block.

Der catch block nützt allerdings nicht viel, der zeigt mir nüx an wenn das ding abstürzt.

@MrTrebron
Du sagtest was von "Background Thread" kann man vll die funktion im Hintergrund aufrufen ?
Das dürfte vielleicht das abstürzen verhindern ?
Bitte warten ..
Mitglied: carp-catcher
15.03.2012 um 16:30 Uhr
ja eine non-blocking Funktion zu verwenden klingt auch gut,
habe das zwar noch nie so gehört aber ich frag mal die jungs von google
Bitte warten ..
Mitglied: MrTrebron
15.03.2012 um 16:32 Uhr
Hi

schau mal hier klick

Edit: oder hier klick

Gruß
Bitte warten ..
Mitglied: carp-catcher
15.03.2012 um 16:44 Uhr
http://www.dreamincode.net/code/snippet875.htm
ich krieg die seite nicht aufgerufen
ich weiß auch net warum, google chrome konnte seite net finden.
komisch ....
Bitte warten ..
Mitglied: Skyemugen
15.03.2012 um 16:57 Uhr
FireFox anyone 30 obligatorische Zeichen
Bitte warten ..
Mitglied: mrtux
15.03.2012 um 18:04 Uhr
Hi !

Warum versuchst Du das nicht über einen modalen Dialog (der solange den Focus hat, bis der Upload abgeschlossen ist) zu regeln? Dann kann der User in der Zeit auch keine Buttons und Menues anklicken. Damit der User sehen kann, dass noch etwas passiert, würde ich evt. dann noch eine Progessbar anzeigen....

mrtux
Bitte warten ..
Mitglied: carp-catcher
15.03.2012 um 20:35 Uhr
also die links gehen jetzt
komisch war vll auch das internet.

@mrtux klingt gut,...aber wie soll eine Progressbar erstellt werden, die genau anzeigt wann Upload fertig ist ?
Bitte warten ..
Mitglied: MonoTone
16.03.2012 um 16:45 Uhr
Es gibt für solche Vorhaben eine Klasse WebClient.

Diese hat eine Methode UploadFileAsync

01.
 Private WithEvents wc As New Net.WebClient 
02.
 
03.
Sub Upload() 
04.
'Userdaten für den FTP Upload. 
05.
'Hinweis. DU SOLLTEST KEINE ANMELDEDATEN IM CODE Hinterlegen, auf die KANN JEDER Der das TOOL hat ZUGREIFEN!! 
06.
 wc.Credentials = New Net.NetworkCredential("user", "pass") 
07.
'Upload ASYNC STARTEN (es wrid ein neuer Thread benutzt -> GUI wird nicht blockiert! 
08.
 wc.UploadFileAsync(New Uri("ftp://ftp.bla.blalala/" & Dateiname), Dateipfad) 
09.
End Sub 
10.
 Private Sub wc_UploadFileCompleted(ByVal sender As Object, ByVal e As System.Net.UploadFileCompletedEventArgs) Handles wc.UploadFileCompleted 
11.
'hier ist der Upload fertig 
12.
' WICHTIG 
13.
' über e.Error bekommst du mit, ob es einen FEHLER gab, und das entsprechend behandeln 
14.
    End Sub 
15.
    Private Sub wc_UploadProgressChanged(ByVal sender As Object, ByVal e As System.Net.UploadProgressChangedEventArgs) Handles wc.UploadProgressChanged 
16.
  'Über e. kommst du auf BytesReceived usw. für deine Progressbar 
17.
    End Sub
Du benötigst also keinen BGW


Gruss Mono
Bitte warten ..
Mitglied: mrtux
17.03.2012 um 02:12 Uhr
Hi !

Zitat von carp-catcher:
@mrtux klingt gut,...aber wie soll eine Progressbar erstellt werden, die genau anzeigt wann Upload fertig ist ?

Das ist nicht so einfach, wenn Du keine Klassen (wie der Kollege MonoTone oben schon schreibt) verwendest. Eine Klasse bietet normalerweise dann Ereignisse, die Du auswerten kannst. Ich beziehe mich jetzt aber in meinem rein fiktiven Beispiel grob angenähert an die Syntax von Objekt Pascal (also Delphi oder Lazarus, denn VB ist bei mir schon ein paar Jährchen her).

Da gibt es dann z.B. ein Ereignis OnUpload(Complete: Integer). Der Wert der Variablen Complete könnte Dir dann beispielsweise angeben, wie viele Megabyte schon übertragen wurden. Das kannst Du dann umrechnen und in einer ProgressBar oder einem Label als Prozentwert anzeigen. Das VB Beispiel des Kollegen MonoTone verdeutlicht das ja schon ansatzweise.

Damit das Ereignis immer wieder von neuem ausgelöst werden kann, muss deine Anwendung "immer wieder mal" die Kontrolle an das OS zurückgeben. Unter Delphi mache ich das z.B. mit Application.ProcessMessages. Wenn Du dann einen modalen Dialog verwendest, verliert deine Anwendung, trotz der kurzfristigen Rückgabe an das OS, nicht den Fokus. So kann der User in dieser Zeit normalerweise auch keine anderen Buttons oder Menüs betätigen, bis der Upload-Dialog wieder geschlossen wird und durch die kurzfristige "Rückgabe" an das OS, kann dieses dann auch wieder "CPU Zeit" an andere Anwendungen vergeben und stellt so auch fest, dass deine Anwendung nicht "hängt", um es mal etwas laienhaft auszudrücken.

Den ganzen "Vorgang" kannst Du dann, wie es die Kollegen SlainteMhath und MrTrebron schon erwähnten, über ein Errorhandling (in Object Pascal mach ich das über einen try, except, finally - Block) absichern.

Die obigen Angaben sind nur Beispiele um die Funktionsweise zu verdeutlichen! Eine Klasse WebClient, ein Ereignis OnUpload() und die Variable Complete gibt es unter Delphi natürlich nicht. Wie gesagt, nur um die Sache aus meiner Sicht "so einfach wie möglich" und an einem praktischen Beispiel zu verdeutlichen, denn was nützt einem das perfekte Wissen über eine Programmiersprache, wenn man die Arbeitsweise einer Methode oder die Abläufe hinter einem OS nicht verstanden hat. Erst muss man wissen wie etwas funktioniert (bzw. funktionieren soll), erst dann kann man sich an die programmiertechnische Umsetzung in der Praxis (mittels der "Sprache" seiner Wahl) machen.

mrtux
Bitte warten ..
Mitglied: MonoTone
18.03.2012 um 13:51 Uhr
Grundsätzlich gebe ich mrtux recht.
Mein Beispiel benötigt allerdings keinen modalen Dialog und auch kein extra Try-catch-
Errorhandling und auch keine Meldung an das Os.
Ich persönlich finde modale Dialoge veraltet...
Man sollte m.E. die GUI immer ansprechbar belassen.
Sollte z.B. der upload sehr langsam vorwärts gehen, will ich den nicht zwingend abbrechen mussen aber
dennoch die GUI bedienen können.
Durch multithreading kann ein thread mit einer Aufgabe parallel und nahezu unabhängig von der Anwendung laufen.
Dadurch kann man die GUI auch problemlos weitet bedienen.
Man muss sich dann nur um die Rückführung der Ergebnisse in die GUI kümmern.
Beim webclient oder beim bgw ist da aber nicht einmal ein cross thread calling Problem vorhanden.
Bitte warten ..
Mitglied: mrtux
18.03.2012 um 15:34 Uhr
Hi !

Zitat von MonoTone:
Durch multithreading kann ein thread mit einer Aufgabe parallel und nahezu unabhängig von der Anwendung laufen.

Ja natürlich und wenn Du damit Erfahrung hast, warum nicht? Mein Kommentar von oben ist ja nur ein Vorschlag...

Man muss sich dann nur um die Rückführung der Ergebnisse in die GUI kümmern.

Und dabei muss man aber sorgfältig vorgehen, dabei passieren oftmals Fehler, die dann zu Leaks führen können, daher arbeite ich bei ersten Versionen einer Applikation immer mit modalen Dialogen. Ich bin da eher konservativ und etwas in einen extra Thread "auslagern" kann man ja hinterher auch noch. Manche IDEs bieten dazu sogar schon vorgefertigte Templates, mit denen ich aber auch nicht arbeite...Eben konservativ halt..

mrtux
Bitte warten ..
Mitglied: carp-catcher
18.03.2012 um 16:09 Uhr
hallo,
ich habe das mal ausprobiert und komme gerade nicht weiter.
Selbst wenn ich ein falsches Passwort eingebe gibt der try- catch block keine error Meldung aus, komisch eigentlich.
01.
Private WithEvents wc As New Net.WebClient 
02.
 Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click 
03.
        Try 
04.
 
05.
            wc.Credentials = New Net.NetworkCredential("user", "pw") 
06.
            wc.UploadFileAsync(New Uri("ftp://ftp.meineseite.de/Wüstenlandschaft.jpg"), "C:\Users\Public\Pictures\Sample Pictures\Wüstenlandschaft.jpg") 
07.
 
08.
        Catch ex As Exception 
09.
            MsgBox(ex.Message) 
10.
        End Try 
11.
 
12.
End Sub
Ich währe dankbar wenn ihr mir helfen könntet

LG carp
Bitte warten ..
Mitglied: SlainteMhath
19.03.2012 um 09:02 Uhr
Moin,

nachdem der Aufruf Asynchron ist, wird keine Fehler geworfen. Das ganze wird per eventhandler erledigt. Siehe Zeile 10ff in MonoTone Codeschnipsel.

lg,
Slainte
Bitte warten ..
Mitglied: carp-catcher
19.03.2012 um 22:44 Uhr
abend,
stimmt den kricht man ja über e.error.tostring,
habs jetzt hinbekommen und das Programm hakt nicht mehr beim Upload und stürzt auch nicht mehr ab.
Ist echt klasse.
Ich danke euch für die Unterstützung.

greez carp


PS: das mit dem modalen Dialog und BGW habe ich nicht getestet, da es so am einfachsten ist wie ich finde.
Bitte warten ..
Ähnliche Inhalte
Microsoft
Seltsame Abstürze von Programmen auf Freigaben
gelöst Frage von DerWoWussteMicrosoft21 Kommentare

Moin Kollegen, kann sich jemand auf Folgendes einen Reim machen? Windows-8.1-Nutzer starten ein Programm von einer Freigabe - alles ...

Windows Userverwaltung
Software Absturz bzw. fehlende Programm Teile
Frage von HardrockracerWindows Userverwaltung2 Kommentare

Ich weiß, der Titel ist wenig aussagekräftig, deshalb schildere ich hier mal die Probleme im Detail. Ich habe über ...

C und C++
Absturz bei "strcat"
gelöst Frage von kunert0345C und C++5 Kommentare

Seit dem ich die Codezeile "strcat( string1, tmp1);" in meinem Queltext habe stürzt das Programm immer ab. Hat einer ...

Microsoft Office
Excel Absturz
Frage von NetworkersMicrosoft Office5 Kommentare

Hallo liebes Forum Ich habe ein Problem mit einer Arbeitsmappe von Excel. Die Arbeitsmappe beinhaltetet eigentlich nur Inhalte farbig ...

Neue Wissensbeiträge
Windows 10

Windows 10 Hello-Anmeldung per Foto ausgehebelt

Tipp von kgborn vor 1 StundeWindows 10

Windows Hello ist eine Funktion, um sich per Fingerabdruck-, Gesichts- oder Iriserkennung bei Windows 10-Geräten anzumelden (siehe), setzt aber ...

Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 9 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 9 StundenSicherheit1 Kommentar

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1012 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Heiß diskutierte Inhalte
Windows Server
SCCM 2016: PXE Boot des Clients schlägt fehl
Frage von gabeBUWindows Server22 Kommentare

Hallo Zusammen Ich habe eine Testumgebung erstellt um über SCCM 2016 einen virtuellen Client aufzusetzen. Folgende Maschinen habe ich ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen19 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Logging von "gesendeten Nachrichten" auf Terminalservern
gelöst Frage von Z3R0C0MM4N0THiN6Windows Server10 Kommentare

Hallo zusammen, kann mir jemand auf kurzem Wege sagen ob 1) die per Task-Manager (oder damals tsadmin) an Benutzer ...