Komisch ist das nicht,
beim MouseMove Event sind Daten zur Maus wichtig daher auch eigene MouseEventArgs,
beim MouseEnter Event steht das Steuerelement im Vordergrund daher die Standard EventArgs
Mr Evil schrieb:
bisher klingts nur nach .net bashing
Was anderes ist es auch nicht.
Es gibt ganz wenige Ausnahmen wo man PInvoke benötigen mag (Ich persönlich hatte noch keine solche Situation, wobei unter .Net 1.0/1.1 wohl tatsächlich einiges fehlte).
Grundsätzlich soll .Net auch nicht die WindowsAPI nachbauen, zudem geht .Net inzwischen in einigen Bereichen über die WindowsAPI hinaus (siehe z.B. WPF).
Naja hab noch nicht wirklich mit Threads gearbeitet. - Was ich mir nun aber außerhalb der Arbeitszeiten anschaun werd.
Ich hatte mir jetzt wie gesagt überlegt, dass mit einem Backgroundworker zu machen, welchen ich mit dem Timer aufrufe.
Allerdings, passiert rein garnix.
Meine Idee war es den Backgroundworker einzig die Onlineabfrage machen zu lassen. - Doch wie ich sehe, kann ich darin den Wert einer boolschen Variable nicht ändern.
Meine Idee war nun eigentlich folgendes:
private void bgWorkerCheckOnline_DoWork(object sender, DoWorkEventArgs e)
{
ReasonSelector rsSelector = new ReasonSelector();
String error;
if (!rsSelector.checkonline(out error))
{
this.online = false;
}
else
{
this.online = true;
}
}
Dies wollte ich dann in der Timerfunktion aufrufen und die Weitere verarbeitung (Aufruf der evtl. refresh-Methoden falls online).
Was mache ich falsch, bzw. wie kann ich das lösen?
// Interessant, wenn ich im nachhinein also nach folgender Zeile eine MessageBox öffne macht er dann doch was er soll. - Wie bekomme ich es nun hin, dass dies auch ohne MessageBox funktioniert?
this.bgWorkerCheckOnline.RunWorkerAsync();
MessageBox.Show(this.online.ToString());
// weitere Verarbeitung je nach Onlinestatus
// Gut eins funktioniert dennoch nicht. Er ruft die Timerfunktion scheinbar nur einmal auf.
// Ich idiot. Es läuft nun, wie ich es gewünscht hab.
Hatte versehentlich das Timerevent nicht gebunden. - Somit konnt ja nix passieren.
Hab im Timerevent folgendes hinzugefügt und es läuft:
this.tmrCheckOnline.Stop();
while (this.bgWorkerCheckOnline.IsBusy)
{
Application.DoEvents();
System.Threading.Thread.Sleep(200);
}
this.tmrCheckOnline.Start();
Danke, Th69, deine Variante hat den gewünschten Effekt gebracht.
Da kann ich mal schön weiter rumtüfteln.
Habe nur im Moment wenig Zeit.
Werde hier sicher noch einiges nachfragen müssen
In meinem 1266Seiten Buch steht zwar viel drin aber wenn man dann was bestimmtes sucht findet man es nicht.
Und es ist soviel theorie und wenig praxisbezogenes.
Danke an alle Thread-beteiligten
Und einen guten rutsch ins neue jahr!
Das dachte ich mir; habe es wieder als Parameter übergeben aber es bleibt einfach leer. Kann doch nicht sein! Es geht einfach nicht. Kann man so en Ding überhaupt als Parameter übergeben?
Das 'schöner' bezog sich auf das expliziete löschen, also 'bla.dispose()' vs. 'delete bla'.
Und das ist dann beides gleich schön bzgl. Schreib- und Leseaufwand.
Desweiteren gebe ich dir ja recht; das C++-Destruktor-Konzept ist natürlich schöner als die C# using-dispose-Hampelei - keine Frage.
Den Versuch von C# die automatische deterministische Finalisierung zu Ersetzen,
sehe ich aber trotzdem als durchaus gelungen an.
Zumindest komme ich damit besser klar, als z.B. in Java (was allerdings schon etwas her ist; vielleicht hat sich da ja auch was geändert):
Wenn ich Resourcen sicher freigeben muss, weiss ich wie das relativ einfach zu machen ist.
Damit kann ich erstmal leben.
Ich kriegs nicht hin festzustellen, wann ich in einem Grid ans Ende gescrollt habe. Das Ereignis fürs Scroll-Ende-erreicht sollte sich in ScrollEventArgs.Type auslesen lassen. Es wird nur leider nie ein Scroll-Ereignis vom Typ "Ende" aufgerufen. Also habe ich versucht über ScrollEventArgs.NewValue und VerticalScrollBar herauszufinden, ob die neue Position dem Maximum des Scrollbalkens entspricht, aber auch das geht nicht, da .NewValue völlig andere Werte abliefert als das Maximum - Dieses Entspricht 2222 bei ~ 100 Zeilen, während .NewValue auf der letzten Position 85 anzeigt. Ich bin verwirrt
Beim FormLoad einen neuen Thread/Backgroundworker straten und dann von dort auf den Webservice zugreifen. Allerdings musst du dir dann überlegen, was du anzeigst, solange noch keine Daten verfügbar sind, evtl. auch eine Möglichkeit zum Abbrechen vorsehen usw.