Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Application.Restart InvalidOperationException

Îåêßíçóå áðü ôï ìÝëïò LARRIS. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 22-07-2008, 22:27. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-07-2008, 09:24 43477

    Application.Restart InvalidOperationException

    καλημερα σε ολους
    Εχω ενα προβλημα με την εντολη  Application.Restart.
    μου βγαζει συνεχεια  "InvalidOperationException Η συλλογή έχει τροποποιηθεί, η λειτουργία απαρίθμησης ενδέχεται να μην εκτελεστεί."
    Ξερει κανει; τι σημενει το μυνημα και ποια η λυση του?
    Χρησημοποιω VB.NET 2008
  •  16-07-2008, 14:11 43483 σε απάντηση της 43477

    Απ: Application.Restart InvalidOperationException

    καλό θα ήτανε να δούμε και λίγο κώδικα και να μας πεις τι τύπου εγαρμογή πας να υλοποίησεις και γιατί κάνεις application.restart.

    Προσπαθείς π.χ να γράψεις στο app.config σε runtime?


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  16-07-2008, 22:39 43502 σε απάντηση της 43477

    Απ: Application.Restart InvalidOperationException

    Καταρχήν, να προτείνω να βγάλεις το ελληνικό language pack γιατί δεν υπάρχει περίπτωση να βγάλεις άκρη με τα ελληνικά μηνύματα λάθους. Με τα αγγλικά μηνύματα μπορείς να ψάξεις στο documentation ή στο Google και να βρεις τί συμβαίνει. Τώρα, αν το "λειτουργία απαρίθμησης" είναι το enumeration, το μήνυμα σημαίνει ότι ενώ εκτελούσες ένα iteration επάνω σε ένα collection, π.χ. με την foreach, δοκίμασες να το τροποποιήσεις προσθέτωντας ή αφαιρώντας κάποιο αντικείμενο από το collection.

    Όλα τα collections υποστηρίζουν το IEnumerator interface, το οποίο επιτρέπει τη χρήση του foreach statement. Όπως αναφέρεται και στο documentation του IEnumerator interface "An enumerator remains valid as long as the collection remains unchanged. If changes are made to the collection, such as adding, modifying, or deleting elements, the enumerator is irrecoverably invalidated and the next call to MoveNext or Reset throws an InvalidOperationException. If the collection is modified between MoveNext and Current, Current returns the element that it is set to, even if the enumerator is already invalidated."


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-07-2008, 00:34 43509 σε απάντηση της 43477

    Απ: Application.Restart InvalidOperationException

    θα συμφωνήσω με τα ελληνικά μυνήματα λάθους.είναι πιο δύσκολο να δεις τι φταίει και να βρεις βοηθεια...

    αν μεταφραζω σωστα στα αγγλικα το μύνημα λάθους ειναι:

    System.InvalidOperationException: Collection was modified enumeration operation might not execute


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  21-07-2008, 16:25 43583 σε απάντηση της 43509

    Απ: Application.Restart InvalidOperationException

    Ναι το μύνημα ειναι ετσι οπως το λες nikolaosk αλλα τι σχεση εχει με το application.restart.Ο κωδικας ειναι παρμενος αυτουσιος απο το documentation  και ειναι ο παρακατω:
    Private Sub InstallUpdateSyncWithInfo()
    Dim info As UpdateCheckInfo = Nothing

    If (ApplicationDeployment.IsNetworkDeployed) Then
    Dim AD As ApplicationDeployment = ApplicationDeployment.CurrentDeployment

    Try
    info = AD.CheckForDetailedUpdate()
    Catch dde As DeploymentDownloadException
    MessageBox.Show("Η νέα έκδοση δεν μπορεί να εγκατασταθει αυτη την στιγμή. " + ControlChars.Lf & ControlChars.Lf & "Παρακαάλω ελενξτέ την συνδεσή δικτύου ή δοκιμάστε αργότερα. Error: " + dde.Message)
    Return
    Catch ioe As InvalidOperationException
    MessageBox.Show("Η νέα έκδοση  δεν μπορεί να εγκατασταθει αυτη την στιγμή. Error: " & ioe.Message)
    Return
    End Try

    If (info.UpdateAvailable) Then
    Dim doUpdate As Boolean = True

    If (Not info.IsUpdateRequired) Then
    Dim dr As DialogResult = MessageBox.Show("Υπάρχει διαθέσημη μια νέα εκδοσή " + ControlChars.Lf & ControlChars.Lf & "Θέλετε να εγκατασταθει η νέα εκδοση? ", "Update Available", MessageBoxButtons.OKCancel)
    If (Not System.Windows.Forms.DialogResult.OK = dr) Then
    doUpdate = False
    End If
    Else
    ' Display a message that the app MUST reboot. Display the minimum required version.
    MessageBox.Show("Έχει εντοπιστεί μια νέα εκδοση απο την τρέχον εκδοση " & _
    "στην έκδοση " & info.MinimumRequiredVersion.ToString() & _
    ". Θα εγκατασταθεί η νέα εκδοση και η εφαρμογή θα επανεκινήσει.", _
    "Update Available", MessageBoxButtons.OK, _
    MessageBoxIcon.Information)
    End If

    If (doUpdate) Then
    Try
    AD.Update()
    MessageBox.Show("Η νέα έκδοση έκδοση εγκατασταθήκε με επιτυχία.Γυνεται επανεκίνηση τις εφαρμογής.")
    Application.Restart()
    Catch dde As DeploymentDownloadException
    MessageBox.Show("Δεν μπορεί να εγκατασταθεί η νέα εκδοση της εφαρμογης. " & ControlChars.Lf & ControlChars.Lf & "Παρακαάλω ελενξτέ την συνδεσή δικτύου ή δοκιμάστε αργότερα.")
    Return
    End Try
    End If
    End If
    Else
    MsgBox("Δεν υπαρχουν νέες εκδοσεις")
    End If
    End Sub

  •  21-07-2008, 17:29 43584 σε απάντηση της 43583

    Απ: Application.Restart InvalidOperationException

    Κοιτάζεις σε λάθος κώδικα. Το κείμενο του exception λέει ξεκάθαρα ότι προσπαθείς να τροποποιήσεις κάποιο collection ενώ κάνεις foreach. Αυτό μπορεί να συμβαίνει στο ApplicationExit event, αν το χειρίζεσαι ή στον κώδικα που εκτελείται όταν ξαναξεκινά η εφαρμογή. Θα πρέπει να κοιτάξεις μήπως υπάρχει πρόβλημα στον κώδικα στο Main function στο Program.cs, στον constructor της κυρίως φόρμας σου και στο Load event της φόρμας. Το exception πρέπει να σου λέει και πού συνέβει το πρόβλημα. Κοίταξες εκεί? Η Exception.ToString() επιστρέφει τόσο το exception που συνέβει όσο και το callstack.

    Με δεδομένο ότι η παλιά έκδοση της εφαρμογής ξεκινάει σωστά και εφόσον δεν εκτελείς κάποιο κώδικα στο ApplicationExit, κάτι πρέπει να έχει αλλάξει στον κώδικα της νέας εφαρμογής και δημιουργεί το πρόβλημα.

     Όπως και να έχει, για να βοηθήσουμε περισσότερο θα πρέπει να μας δώσεις περισσότερες πληροφορίες για το exception.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  22-07-2008, 14:00 43604 σε απάντηση της 43584

    Απ: Application.Restart InvalidOperationException

    Παρακατω ειναι ο κωδικας για το Load event της κυριας φορμας

    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If My.Application.IsNetworkDeployed Then

    Me.Label1.Text = "Έκδοση : " + ControlChars.Lf & ControlChars.Lf & +My.Application.Deployment.CurrentVersion.ToString
    Else
    Me.Label1.Text = Nothing

    End If
    AutoFrm.MdiParent = Me
    AutoFrm.Show()
    End Sub




    και στο load event της φορμας που φορτωνεται(Autofrm) δεν εχω κανενα for each.Το μηνυμα μου το βγαζει οταν παει να κλεισει η εφαρμογη για να κανει restart.Exit event δεν εχω βαλει. πουθενα.Τωρα αν ξανακανω run  το project θα μου εχει παρει την updated εκδοση...
  •  22-07-2008, 22:27 43612 σε απάντηση της 43604

    Απ: Application.Restart InvalidOperationException

    Και πάλι δεν λες ποιό είναι το call stack του exception. Ένα απλό ToString() θα σου δώσει το σημείο στο οποίο εμφανίστηκε το exception. Αυτό πρέπει να κοιτάξεις πρώτα και μετά οτιδήποτε άλλο. Κι εμείς δεν μπορούμε να σε βοηθήσουμε μαντεύοντας τί μπορεί να συμβαίνει, χωρίς να ξέρουμε ούτε κάν που εμφανίστηκε το exception!

    Θα κάνω άλλη μία "μαντεία" πάντως, και θα αναρωτηθώ μήπως το exception σηκώνεται σε κανένα finalizer ή καμμία dispose η οποία προσπαθεί να αδειάσει με περίεργο τρόπο κανένα collection? Σε κανονική λειτουργία θα σηκωνόταν exception αλλά δεν θα το καταλάβαινες επειδή η εφαρμογή έχει ήδη κλείσει όταν καλούνται οι finalizers. Στην περίπτωση του restart όμως, η εφαρμογή εξακολουθεί να υπάρχει και έτσι "πιάνει" το exception.

    Όπως και να έχει πρίν προχωρήσουμε παραπέρα θα πρέπει να μας δώσεις το περιεχόμενο του exception!


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems