Der Click Aufruf sollte wohl vom Hauptanwendungs/GUI-Thread kommen und
nicht von anderen Threads/Backgroundworkern.
Schreib doch eine probeweise eine 2te Funktion die genau dasselbe macht
wie der Button-Click, halt nicht als Eventhandler (sender und e wird ja
eh nicht genutzt):
1 |
|
2 | private void Fkt_statt_Button()
|
3 | {
|
4 |
|
5 | //ggf. if-rahmen auskommentieren
|
6 | if (toolStripMenuItem2.Checked == true) //zugriff auf gui element?
|
7 | {
|
8 | //Anfang interessanter teil
|
9 | DialogResult dialogResult = MessageBox.Show("Sure", "Some Title", MessageBoxButtons.OKCancel);
|
10 | if (dialogResult == DialogResult.Cancel)
|
11 | {
|
12 | return;
|
13 | }
|
14 | else
|
15 | {
|
16 | //StartTakingPicture();
|
17 |
|
18 | startTimer.Interval = 1000;
|
19 | startTimer.Enabled = true;
|
20 | //startTimer.Tick += new EventHandler(TimerEvent1);
|
21 | }
|
22 | //Ende interessanter Teil
|
23 | }
|
24 | else
|
25 | {
|
26 |
|
27 | formsTimer.Enabled = true;
|
28 | //formsTimer.Tick += new EventHandler(TimerEvent);
|
29 |
|
30 | }
|
31 | }
|
Was schon gut ist, ist das du die Tick-Eventhandler schon mal vorher
zugewiesen hast. Die Sollten sich ja nicht dauernd ändern und die Timer
existieren ja eh schon.
Scharf geschalten werden sie ja über
und dementsprechend auch wieder abgeschalten deaktiviert.
Die Warnung zum Thread-Übergriff ist natürlich spannend. Ist natürlich
die Frage von wo du denn den "Click" auslösen willst, wenn das jetzt eh
nur zum Testen ist dann ruf den doch gleich zum Abschluss des
Constructors auf.
Form geht auf und als letzte Aktion wird halt der "Click" aufgerufen.
Wenn von anderen Threads aus dann geht die ganze Callback- und
Invoke-Geschichte los.