Hallo,
ich stehe gerade vor einem, mir seltsam vorkommenden, Problem.
Ich habe ein event welches aufgerufen wird und 2 Funktion via Invoke aufruft:
void OnInjected()
{
if (!bIsCollectiong)
{
Invoke(new DelegateCallVoidVoidFunktion(HideInjectedWaitingForm));
Invoke(new DelegateCallBoolVoidFunktion(StartAquisition));
}
}
Und so wie es aussieht, wird der erste Aufruf (HideInjectedWaitingForm) nicht ausgeführt.
Kann es sein, das ein "Invoke" aus irgentwelchesn Gründen nicht aufgerufen wird? z.B. wenn der Rechner echt lahm ist, und die CPU auslastung hoch geht?
Gruß Stu
Nein, kann ich auch leider nicht. Der Rechner ist beim Kunden. Und bei mir kommt der Fehler nicht.
dafür verwendet man remot-debugging. schick deinem kunden die pdb´s, die er in das ausführungsverzeichniss kopieren soll, sag ihm das er seinen router eine port-weiterleitung beibringen muss (welchen port habe ich vergessen...) und mach ein attach to process mit deinem debugger im vs.
Ja ist nicht so einfach, der der Fehler (wenn er kommt) erst noch 4 stunden oder so kommt. Muss ich so mal schauen.
Hallo Stu42,
wir reden über Control.Invoke?
Control.Invoke arbeitet synchron. Da kann nichts verloren gehen. Allerdings wird Control.Invoke nicht ausgeführt, wenn das GUI (durchgehend) beschäftigt ist.
herbivore
Ja genau, Control.Invoke.
Ja ich hab es schon fast vermutet das es dadran nicht liegen kann, bzw die funktion immer aufgerufen wird.
Bin in letzer Zeit entwas Paranoid in sachen Threadsicherheit, bzw mit diesen Asynchronen Invokes.
Denn mein Programm läuft auf einen schnellen Rechner sehr gut, nur auf einem langsameren kommen Fehler!
Hallo Stu42,
Denn mein Programm läuft auf einen schnellen Rechner sehr gut, nur auf einem langsameren kommen Fehler!
das deutet aber schon auf Probleme mit Synchronisation oder dem Fehlen derselben hin. Stichwort Racing Condition.
herbivore
Ich habe mal eben gegoogelt und eine Race Condition wäre denn sowas?
bool bTrigger = false;
void DoIt()
{
while(bTrigger )
Application.DoEvents();
bTrigger = true;
//sicherer code
bTrigger = false;
}
Und wie ist das eigentlich mit dem "lock (this)" in Timer-Tick-Funktionen?
Ist jeder Timer-Tick in einem eigenen Thread? Denn wenn dann der nächste Tick kommt, während der vorherige Tick noch ausgeführt wird, könnte sowas sich dann aufschaukeln zu einem Deadlock?
Ist jeder Timer-Tick in einem eigenen Thread?
ja.
Denn wenn dann der nächste Tick kommt, während der vorherige Tick noch ausgeführt wird, könnte sowas sich dann aufschaukeln zu einem Deadlock?
nicht deadlock. das ist was anderes aber es kommt dann zum sogenannten "sterbenden thread"
Hallo Stu42,
Ist jeder Timer-Tick in einem eigenen Thread?
nein!
Tick gibt es nur bei System.Windows.Forms-Timer und da laufen alle Events im GUI-Thread.
herbivore
Hallo JAck30lena,
System.Timers.Timer sollte man - wenn kein besonderer Grund vorliegt - in WinForms-Anwendungen ohnehin nicht verwenden.
herbivore