Laden...

Programm läuft nur, wenn VS installiert ist

Erstellt von handycommander vor 14 Jahren Letzter Beitrag vor 14 Jahren 944 Views
handycommander Themenstarter:in
415 Beiträge seit 2006
vor 14 Jahren
Programm läuft nur, wenn VS installiert ist

Hi,

ich steh grad vor nem kleinen Problem...
Ich habe mit Visual Studio 2008 eine Anwendung mit dem .NET Framework 2.0 entwickelt...
Auf den Rechnern, bei denen Visual Studio installiert ist, funktioniert die Software ohne Probleme...
Auf anderen, bei denen kein Visual Studio, jedoch das .NET Framework 2.0 installiert ist, nicht...
Es stürz bei irgendeinem Vorgang ab... es kommt auch eine Fehlermeldung, jedoch verschwindet die sofort mit dem Programm gleich wieder, so dass ich nicht mal lesen kann, um was es sich überhaupt handelt... nicht mal einen Screenshot kann ich davon machen.

Ich denke einfach, dass noch irgendwelche Systemdateien fehlen.
Wie kann ich jetzt rausfinden, welche Dateien mein Programm benötigt?

//Edit:
Hab grad rausgefunden, dass es anscheinend irgendwas auch mit Threading zu tun hat... wie kann das sein, dass es dann funktioniert, sobald ich auf dem selben Rechner Visual Studio 2008 installiere? xD

//Edit2:
Ich hab noch was rausgefunden...
Es liegt nun demnach an folgender Funktion:


private void SetPropertyThreadSafe<ControlType, PropertyType>(ControlType control, string propertyName, PropertyType value) where ControlType : Control
        {
            MessageBox.Show("test");
            if (control.InvokeRequired)
            {
                SetPropertyValueCallback<ControlType, PropertyType> cb = new SetPropertyValueCallback<ControlType, PropertyType>(SetPropertyThreadSafe);
                control.Invoke(cb, new object[] { control, propertyName, value });
            }
            else
            {
                System.Reflection.PropertyInfo property = control.GetType().GetProperty(propertyName);
                property.SetValue(control, value, null);
            }
        }

private delegate void SetPropertyValueCallback<ControlType, PropertyType>(ControlType control, string propertyName, PropertyType value) where ControlType : Control;

So wird die Funktion aufgerufen:


SetPropertyThreadSafe<meinPanelControl, bool>(myPanel, "Visible", true);

Wenn nun meine Anwendung aufgerufen und die SetPropertyThreadSafe ausführen lasse in einem Thread, wird die MessageBox mit der Nachricht "test" nicht ausgegeben...

//Edit 3:
Ok, es liegt eindeutig an der Funktion... wenn ich es wie folgt löse, funktioniert es xD


InvokeIfRequired(myPanel, (MethodInvoker)delegate()
{ myPanel.Visible = true });


private void InvokeIfRequired(Control target, Delegate methodToInvoke)
        {
            if (target.InvokeRequired)
            {
                target.Invoke(methodToInvoke);
            }
            else
            {
                methodToInvoke.DynamicInvoke();
            }
        }

Sieht vll jemand das Problem? 😦

Hab die Code-Beispiele aus den Dotnet-Snippets:
http://dotnet-snippets.de/dns/threadsicheres-zuweisen-von-control-eigenschaften-SID829.aspx

Danke und Gruß,
Tobi

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo handycommander,

fang doch mal die Exception und schau sie dir an. Sonst ist das doch nur Rätselraten.

herbivore

handycommander Themenstarter:in
415 Beiträge seit 2006
vor 14 Jahren

soweit komme ich leider nicht...
Die Anwendung beendet sich mit der Fehlermeldung - egal ob ich sie selber auswerfen lasse oder nicht...

Gruß,
Tobi

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo handycommander,

nicht mal einen Screenshot kann ich davon machen.

Starte drei Programme auf deinem Rechner:

einen Screenshot-Tool: Prio Normal
einen Stresstest: Prio Niedriger als Normal
Dein Programm: Prio Niedrig

Dann solltest du eigentlich genug Zeit haben.

Ziel muss es sein, so oder so an die Fehlermeldung zukommen.

herbivore

C
401 Beiträge seit 2007
vor 14 Jahren

Kannst du den Fehler nicht in den Log schreiben?