BackGroundWorker -> Namespace Problem

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von _PASCAL_.

    BackGroundWorker -> Namespace Problem

    Hallo,

    ich hab eine Funktion zur berechnung von Messstellen in einen BackgroundWorker gepackt.

    Der code lässt sich ausführen, hängt sich aber mit einer StackOverflowException auf wenn eine new Zedgraph.PointPairList erstellt wird.

    Ich habe die Zedgraph.dll als Verweis in mein Projekt eingebunden. Jetzt vermute ich dass der BackgroundWorker trotz "Imports Zedgraph" das nicht mitbekommt.

    Wie kann ich speziell im BackgroundWorker nochmals die Zedgraph.dll angeben?

    Gruß
    Bilder
    • stackoverflow.JPG

      164,48 kB, 1.195×822, 178 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „_PASCAL_“ ()

    Das muss an der Dll liegen. Oder an den Werten die Du übergibst. Guck Dir die Werte der Variablen an. Wenn die in Ordnung sind kann's eigentlich nur noch an der Dll liegen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    _PASCAL_ schrieb:

    ich hab eine Funktion zur berechnung von Messstellen in einen BackgroundWorker gepackt.

    Der code lässt sich ausführen, hängt sich aber mit einer StackOverflowException auf wenn eine new Zedgraph.PointPairList erstellt wird.

    eiglich gibts StackOverflow nur, wenn man viel zu oft große Mengen Speicher alloziiert und nimmer freigibt. Oder bei Rekursionen, die keine Abbruchbedingung finden.

    Und ohne threading gehts?

    Wie kommen die Messungen ühaupt herein? Üblicherweise werden die in einem NebenThread angeliefert, unds gibt eh Theater, da Messpunkte in ein Control zu packen.
    was mir aufgefallen ist ... ich erstelle tabpages dynamisch ... dabei möchte ich gerne eine Zedgraph.ZedgraphControl auf einem tab erzeugen aber das geht nicht da kommt ein fehler "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement ZedGraphControl erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
    ----------------------------------

    ohne backgroundworker funktioniert die ganze geschichte ...

    ich lese eine spalte in einer anderen funktion aus einer .tms datei aus das dauert nicht lange das ist gleich passiert (deshalb da kein bgrworker)
    und am ende habe ich 2 double() array in denen die x und y werte liegen ...

    aus diesen bastle ich mir dann eine Zedgraph.PointPairList( x() as double, y() as double)

    funktioniert auch prima wenn die funktion nicht im backgroundworker aufgerufen wird. Daher dachte ich dass die dll vielleicht dem backgroundworker nicht richtig übergeben wird.

    ich habe auch schon mit dem debugger geschaut ob eine schleife das mehrmals ausführt aber es crasht schon beim ersten mal.

    Im HauptThread läuft das ganze ohne Probleme durch ...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „_PASCAL_“ ()

    _PASCAL_ schrieb:

    da kommt ein fehler "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement ZedGraphControl erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."

    Das Zauberwort heißt Invoke. Da gibt es Terabyte zu hier im Forum. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dankeschön, werde ich mir mal anschauen ...

    Bezüglich des BackgroundWorkers habe ich es jetzt so gelöst, dass ich mir eine eigene Liste und eine eigene Klasse XYPointPairs gebastelt habe, sodass im BackgroundWorker nichts mit der Zedgraph.dll gemacht wird und siehe da es funktioniert problemlos ;)

    Gruß