Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Backgroundworker installation

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Backgroundworker installation (1683 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 13. Dez. 2016 11:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!
Ich hätte mal eine Frage, wie man mit .net die Statusleiste (Dieselbar) in Autocad anspricht.
Mir ist bekannt wie man den Backgroundworker von System.Windows.Forms installiert, damit ich mir bspw. den Prozess im Dialogfenster anzeigen lassen kann.
Ich möchte bevor der Dialog wie im Bild angezeigt wird, Zeichnungen auswählen können. Der Prozess des Ladens kann mitweilen sehr viel Zeit in Anspruch nehmen. Damit der Anwender nichts "unüberlegtes" tut, soll der Prozesstatus in der Menuleiste angezeigt werden.

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 13. Dez. 2016 11:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Autodesk.AutoCAD.Runtime.ProgressMeter

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 13. Dez. 2016 12:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für die fixe Aw

------------------
Gruss Dirk
Blog | Adolf Spende | Infra-Feed | ÅF AB

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 24. Aug. 2017 20:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Kurz mal nachgefragt:
Wenn ich kleiner Prozesse habe, läuft die Prozessanzeige, aber nicht wenn der zuviele Objekte erzeugt werden. Ist die Umsetzung so korrekt?
Code:
ProgressMeter pm = new ProgressMeter();
            pm.Start("Running...");
            pm.SetLimit(100);

            for (int i = 0; i <= 100; i++)
            {
                System.Threading.Thread.Sleep(5);
                pm.MeterProgress();

                if (o1 != null)
                {
                    //Application.DoEvents();

??? Hier wird der Befehl zur Erzeugung von Objekten in die Zeichendatenbank ausgeführt - kann man das so machen ???
                    o2.CorridorFeatureLinesTo3dPoyline(o2.Corridor);
                    App_Sampleline.Extensions.DrawPointOnSampleLineIntersection(o1.Alignment, o2.curvIds);
                    o1 = null;
                }

            }
            pm.Stop();
            pm.Dispose();


------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 24. Aug. 2017 22:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Grundsätzlich richtig. AutoCAD gibt bei rechenintensiven Prozessen oftmals kine Rückmeldung. Auf die Aktualisierung der UI (ProgressMeter) hat man keinen Einfluss. Daher nehme ich für die Statusanzeige einen eigenen Dialog, der in einem parallen Thread ausgeführt wird. Den kann ich dann aktuell halten, die Anzeige/Status aktualisieren, wie ich will.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 25. Aug. 2017 10:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das war meine leise Vermutung, besten Dank für den Tip

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 26. Aug. 2017 14:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nimmt man einen Dialog für die Prozessanzeige habe ich das folgendermassen hier als Beispiel
Sollte eigentlich funktionieren, wenn ich in die backgroundWorker_DoWork(object sender, DoWorkEventArgs e) noch die Befehlausführung integriere!

Wenn ich mal angenommen 10 000 Objekte rot zeichnen will und das mittels o.g. Prozessmethode anzeigen lassen will,
dann müsste in doWork() 10 000 als 100% deklariert werden und als Ergebnis 1% 10 Objekten entsprechen. Ist das so korrekt ausgeführt?

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 26. Aug. 2017 18:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Fast wie vermutet stellt sich hier ein Problem.
Wenn ich in meinem Beispiel  ExecuteCommand()
aufrufe kommt es zu einem Konflikt

Code:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt

Es sind hier zwei Prozesse am Laufen, einmal die Befehlsausführung, die parallel mit der Prozessanzeige laufen muss.
Sind wir da beim Thema asynchrone Programmierung?

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 26. Aug. 2017 22:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

asynchron ist was anderes, beim Variablen-/ Speicherhandling aber ähnlich.
Da kannst du einen Prozess starten, und weitern Code ausführen. Irgendwann kommt dann ein await, da wartet dann der Code auf das Ende des zuvor gestarteten asynchronen Code.
Du bist beim Thema MultiThreading. Im einfachsten Fall deklarierst du die Variablen, die du in mehreren Prozessen brauchst als volatile.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 27. Aug. 2017 11:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

MultiThreading oder TaskParellelLibrary , hab mal davon
gehört, dass Autocad auf grund Entwicklung aus den 80ern 1-threading zulässt.
Kann das Einschränkungen für AppEntwicklung bedeuten?
Nach meiner bisherigen Vorgehensweise läuft die Prozessanzeige zuerst und anschliessend wird der Befehl ausgeführt. Spricht der Befehl grosse Prozessorleistung an, dann friert die Dialoganzeige mit der ProgressBar erstmal ein. Lässt sich das mit deinem Vorschlag vermeiden?

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 27. Aug. 2017 12:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

... das hat nichts damit zu tun, was AutoCAD da intern veranstaltet. Um sich davon unabhängig zu machen, erzeugt man ja einen eigenen, neuen Thread.
Der läuft dann in einem anderen Speicherbereich wie das AutoCAD und dein von dort gestarteter Programmcode - damit auch unabhängig von der Auslastung des Prozessors durch deine Anwendung. Du musst lediglich sicherstellen, dass zwischen diesen vollkommen getrennten Speicherbereichen kommuniziert/ zugegriffen werden kann.
Das geht entweder über volatile deklarierte Variablen oder über öffentlich zugängliche Methoden - keinesfalls aber direkt.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 28. Aug. 2017 20:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Noch unklar?

Ich habe einen Task oder Thread so genau sicher bin ich mir da nicht für:
1) Select Objects
2) DoWork (hier gibt es zwei Arten von Arbeit - Lese und Schreibe Daten in die Zeichnung)
3) ProgressBar anzeige funktioniert mit den BackgroundWorker object backgroundWorker_DoWork, backgroundWorker_ProgressChanged, backgroundWorker_RunWorkerCompleted

zu 1) wähle ich Objekte aus
zu 2) Danach sollte die ProgressBar anfangen zu arbeiten, damit der Progressbalken angezeigt wird (0%) bevor die DoWork() methode startet.
zu 3) Macht mir der BackgroundWorker etwa Probleme (in dieser Anordnung)

Was sind volatile Variablen (sind die Autocad spezifisch oder in .net verankert) ?

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 28. Aug. 2017 22:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
Was sind volatile Variablen (sind die Autocad spezifisch oder in .net verankert) ?

https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/volatile

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 31. Aug. 2017 08:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Besten Dank Sebastian, da hast du exakt das gefunden.
Da komme ich auf jeden Fall erstmal weiter.

------------------
Gruss Dirk
Blog

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 01. Sep. 2017 08:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich muss wiedermal sagen, einfach nur genial und echt super eure Hilfestellungen hier.
Eine ganz neue Erfahrung, die es mir nun ermöglicht mehrere Processe gleichzeitig in Autocad laufen zu lassen.
Danke Holger für den Anstoss mit Thread und danke Sebstian mit den Link dazu - es war nur noch wenig Schweissarbeit, da der Kode noch umgestellt werden musste
So wie Holger meinte:
Zitat:
Das geht entweder über volatile deklarierte Variablen oder über öffentlich zugängliche Methoden - keinesfalls aber direkt

Code:
           
Thread worker = new Thread(corr.DoWork);
worker.Start();

Mein Test verlief jetzt so, dass ich den Befehl ausführen konnte und während er im Hintergrund arbeitet, normal in Autocad weiterarbeiten konnte.
Das will ich zwar nicht, sondern anstelle eine Progressanzeige starten.
Lässt sich der Thread irgendie längenmässig messen, dann wäre es einfach den status an ProgressBar zu übergebn ?

Code:
while (!workerThread.IsAlive)

gibt doch nur true zurück ?
Ansonsten kann die Progressanzeige nur "zählen", wenn true zurück kommt, also keine Prozenanzeige ?

------------------
Gruss Dirk
Blog

[Diese Nachricht wurde von cadplayer am 01. Sep. 2017 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz