Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  VB.NET-AddIn -> IV wird nicht beendet

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:  VB.NET-AddIn -> IV wird nicht beendet (2159 mal gelesen)
rtend12
Mitglied
Dipl.-Ing. (FH) Maschinenbau / Konstrukteur


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

Beiträge: 436
Registriert: 21.07.2004

Catia V5 (R16SP5, B18SP5)
VB.Net 2003

erstellt am: 20. Jun. 2006 22:43    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,

hab mal eine Frage zur Add-In-Programmierung mit VB.NET.
Wenn ich mein AddIn im IV ausführe und IV dann schließe bleibt IV als Prozess weiter aktiv. Wenn ich das AddIn nicht ausführe wird IV richtig beendet.
Beim Debuggen läuft die Deactivate-Routine ganz durch.
Hat von euch jemand eine Idee woran das liegen könnte?

Ich denke mal es liegt daran, dass irgendein Objekt im Speicher hängt.
Aber wie krieg ich dieses Objekt raus. Kann man sich eine Liste aller Objekte anzeigen lassen, die gerade aktiv sind?

Danke
Reinhard

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012

erstellt am: 21. Jun. 2006 11: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 Nur für rtend12 10 Unities + Antwort hilfreich

Hallo Reinhard,

ich vermute auch, dass ein Objekt hängt, weil mir das auch öfters passiert. Leider wird beim Zugriff auf Inventor Objekte der Code nicht richtig gemanagt. Ich mache meine Projekte alle in VS2005 aber nicht als Addin sondern als stand-alone. So gibt es bei mir keine Deactivate, sondern die Dispose. Da setze ich für alle Fälle alle meine Objekte auf null.

Bei einem stand-alone Programm ist das alles viel schwieriger, da man den Application Event implementieren muss, und der Event gehört zum Inventor Thread. Und da .NET thread-safe ist, kann ich aus dem Event meine exe nicht beenden. Aber mit dem passenden Delegate und Invoke geht dass dann auch schon.

Und ich glaube nicht, dass man sich automatisch eine Liste aller aktiven Objekte anzeigen lassen kann. Das würde aber vieles leichter machen.

------------------
Grüße daywa1k3r

FX64 Software Solutions

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

BernhardU
Mitglied
Techniker / Konstrukteur / Student


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

Beiträge: 328
Registriert: 17.08.2005

Windows XP SP3
AIP 2011
VS 2005

erstellt am: 21. Jun. 2006 15:19    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 rtend12 10 Unities + Antwort hilfreich

Hi Igor!
Ich habe auch das Problem aber mit meiner stand alone Application!
Ich habe auch die Applicationevents von IV eingebunden, dass wenn iv geschlossen wird, das auch mein Programm geschlossen wird!
Doch iv bleibt nach dem Schließen immer im Hintergrund geöffnet!

wie funktioniert das mit

Zitat:
Delegate und Invoke
?
Oder liegt das auch an einem objekt?

Vielen Dank!

mfg Bernhard

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

BJ
Mitglied
PLM System Administrator


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

Beiträge: 488
Registriert: 20.12.2002

SolidEdge
Inventor
AutoCad
---
Dell Precision M90
Win XP Prof., SP 2
2 GHz Dual Core, 2GB RAM
NVIDIA Quadro FX 2500M, 512MB

erstellt am: 21. Jun. 2006 17:48    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 rtend12 10 Unities + Antwort hilfreich

Hallo!

Würde mich auch brennend interessieren; habe ein ähnliches Problem mit threadübgreifenden Aktionen!

Gruß,
BJ

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012

erstellt am: 21. Jun. 2006 20: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 rtend12 10 Unities + Antwort hilfreich

Na ja, ein Beispiel. Stand-alone Programm instanziert ein paar Inventor Objekte, und muss dann merken, wenn Inventor geschlossen wird, um die wieder frei zu geben. Es werden die AppicationEvents implementiert, in dem Fall Application.Quit. Der Code von Application.Quit befindet sich in unserem externen Programm, jedoch wenn wir z.B. Application.ExitThread(); versuchen, würden wir eine „Thread übergreifende“ Exception bekommen, weil wir versuchen aus dem Inventor Thread auf unseren Thread zu schließen. Also ist es nötig eine Delegat Funktion zu implementieren. Könnte ganz einfach so aussehen:

Code:

        // Delegate
        private delegate void DelegateCloseApplication();

        private void CloseApplication()
        {
            Application.ExitThread();
        }


Und dann noch kurz die Implementierung von Inventor Application Events:

Code:

private Inventor.ApplicationEvents ApplicationEvts;
private Inventor.ApplicationEventsSink_OnQuitEventHandler ApplicationEvents_OnQuit;

ApplicationEventsSink();

#region Application Events

        public Boolean ApplicationEventsSink()
        {
            try
            {
                ApplicationEvts = oApp.ApplicationEvents;
                ApplicationEvents_OnQuit = new Inventor.ApplicationEventsSink_OnQuitEventHandler(OnApplicationQuitEvent);
                ApplicationEvts.OnQuit += ApplicationEvents_OnQuit;
            }
            catch (Exception ex)
            {
                log.Log("ApplicationEventsSink: " + ex.Message, FX64Log.FX64_Log_Type.Exception);
                return false;
            }
            return true;
        }

     

        private void OnApplicationQuitEvent(Inventor.EventTimingEnum oTiming, Inventor.NameValueMap oValueMap, out Inventor.HandlingCodeEnum oHandling)
        {
            if (oTiming == Inventor.EventTimingEnum.kBefore)
            {
                try
                {
                    Invoke(new DelegateCloseApplication(CloseApplication), new object[] { }); //Thread beenden mit Hilfe von der Delegate Funktion
                    oHandling = Inventor.HandlingCodeEnum.kEventHandled;
                }
                catch (Exception ex)
                {
                    log.Log("OnApplicationQuitEvent: " + ex.Message, FX64Log.FX64_Log_Type.Exception);
                    oHandling = Inventor.HandlingCodeEnum.kEventCanceled;
                }
            }
            oHandling = Inventor.HandlingCodeEnum.kEventHandled;
        }

#endregion


Und mit der Zeile:

Code:

Invoke(new DelegateCloseApplication(CloseApplication), new object[] { });

erfolgt der Zugriff von einem auf das andere Thread.

Delegates können ganz normal einen Rückwert und Argumente besitzen. Wegen der Einfachheit habe ich hier weder Rückgaberecht noch Argumente benutzt.

Das hier ist eher nur ein Ausweg über die Delegates, jedoch gewinnen die richtig an Bedeutung, wenn man eine Multithread Anwendung schreibt und die Threads müssen die Daten austauschen.

Na ja, so in etwa mache ich es, und nein ich kann es nicht in VB.NET posten 

Andere Vorschläge und Wege sind natürlich willkommen.

------------------
Grüße daywa1k3r

FX64 Software Solutions

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

rtend12
Mitglied
Dipl.-Ing. (FH) Maschinenbau / Konstrukteur


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

Beiträge: 436
Registriert: 21.07.2004

Catia V5 (R16SP5, B18SP5)
VB.Net 2003

erstellt am: 21. Jun. 2006 20:50    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 daywa1k3r,

wie krieg ich alle Objekte auf null? Kann ich in meinem AddIn auch application.exitthread benutzen?

Gruß
Reinhard

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570
Laptop: Alienware m17x
Win7, Inventor2012

erstellt am: 21. Jun. 2006 21:00    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 rtend12 10 Unities + Antwort hilfreich

Ein AddIn läuft in gleichem Prozess wie Inventor, daher ergibt da Application.ExitThread(); keinen Sinn. Du solltest in der Deactivate versuchen alle Objekte (musst du wissen welche du benutzt hast) auf null zu setzen (Object = null; ).

------------------
Grüße daywa1k3r

FX64 Software Solutions

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



TGA ? Ingenieur (m/w/d)

SOLAR-COMPUTER ist ein seit 45 Jahren bestehendes erfolgreiches Software-Unternehmen, das Programme für technische Gebäudeausrüstung und Energieeffizienz in der Zentrale Göttingen entwickelt und selbst oder über Partner vertreibt. Damit exklusiv verbunden sind Entwicklungs-Büros in Berlin, Dresden und San Diego. Der Vertrieb erfolgt über regionale SOLAR-COMPUTER-Geschäftsstellen in Berlin, Leipzig, Mönchengladbach, Frankfurt, München, Österreich und weitere Partner....

Anzeige ansehenFeste Anstellung
BernhardU
Mitglied
Techniker / Konstrukteur / Student


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

Beiträge: 328
Registriert: 17.08.2005

Windows XP SP3
AIP 2011
VS 2005

erstellt am: 05. Jul. 2006 19:38    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 rtend12 10 Unities + Antwort hilfreich

Hi! Also habe wirklich alle meine Objekte auf Nohting gesetzt wie nur irgendwie mit IV zu tun hatten und es funktioniert jetzt einwandfrei!
Habe nur noch ein kleine Problem bei einem Programm, mit dem ich teile in eine Baugruppe einfüge!
Und zuvor definiere ich auch noch das Application Event OnQuit! Das Event funktioniet auch ohne Probleme, doch kann ich nur einen Teil einfügen in die Baugruppen, dann funktioniert es nicht mehr! 
Ich werde das ganze jetzt mal debuggen!

Vielen Dank nochmal!!

mfg Benhard

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