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
Hallo handycommander,
fang doch mal die Exception und schau sie dir an. Sonst ist das doch nur Rätselraten.
herbivore
soweit komme ich leider nicht...
Die Anwendung beendet sich mit der Fehlermeldung - egal ob ich sie selber auswerfen lasse oder nicht...
Gruß,
Tobi
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
Kannst du den Fehler nicht in den Log schreiben?