Ahh, das heißt, das Abbrechen Funktioniert aber du kannst ihn nicht neu
starten.
Versuchst du den Neustart sofort nach dem CancelAsync()? vieleicht ist
der BW wirklich noch nicht fertig und hängt noch in z.B. der readData
Methode.
Ansonsten gäbe es noch den Hack, einfachden BW neu zu erzeugen also
folgendermaßen:
1 | private BackgroundWorker bw = null;
|
2 |
|
3 | private void main()
|
4 | {
|
5 | StartBW();
|
6 | if (MessageBox.Show("writing data finished!\r\npress ok to continue...") == DialogResult.OK)
|
7 | {
|
8 | bw.CancellationPending=true
|
9 | }
|
10 | }
|
11 |
|
12 | private void StartBW() {
|
13 | if(bw != null) {
|
14 | bw.DoWork -= bw_DoWork;
|
15 | bw.Dispose();
|
16 | }
|
17 | bw = new BackgroundWorker();
|
18 | bw.DoWork += bw_DoWork;
|
19 | bw.RunWorkerAsync();
|
20 | }
|
21 |
|
22 | private void bw_DoWork(object sender, DoWorkEventArgs e)
|
23 | {
|
24 | PBSendData(0xF0);
|
25 | PBSendData(0x00);
|
26 | PBSendData(0x00);
|
27 | for (int j = 0; j < 3; j++)
|
28 | {
|
29 | readData();
|
30 | }
|
31 | while( !bw.CancellationPending) {
|
32 | PBSendData(0xFF);
|
33 | readData();
|
34 | }
|
35 | e.Cancel = bw.CancellationPending;
|
36 | }
|
Alles ohne Garantie auf Richtigkeit, da ich im Mom leider kein VS zur
verfügung hab.