Forums Neueste Beiträge
 

VS2008, Factory - BackgroundWorker - Implementierung

30/04/2010 - 15:33 von Michaela Brauner | Report spam
Hallo,

ich hoffe ich nerve momentan nicht.
Möchte es einfach richtig machen.
Die Scannergeschichte sollte ich dann so hinbekommen.
- Beispiele habe ich ja bekommen.

Was für mich eben wichtig ist, die Architektur.
Aus meiner Sicht passt die Struktur.
Bild --
Factory
Produkte - Scanner
Aufteilung in Interface, Abstract BasisClass, konkrete
Klassen(konkrete Scanner)
Was gehört wie und wo rein. Stefan danke nochmals für Deine tolle
Unterstützung und Tipps. Hoffe du hilfst mir noch.

Thread habe ich mit BackgroundWorker realisiert. Ging ganz gut.
Frage:
Ist die Art und Weise korrekt, kann ich damit aufbauen?
Wird das heutzutage so gemacht?
Nicht dass ich anfange nachher ist alles falsch.

Es ist ja sicherlich ein einfaches Beispiel.
Konkret wàre das interssant zu wissen, wie so etwas in MEF, dem neuen
Framework aussieht, aussehen würde. Wenn da jemand was hat, so dass man
konkret sieht, was wird denn zukünftig einfacher.


Danke und Grüße Michaela





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Brauner.Hardware.Definitions.Core;
using System.ComponentModel;



namespace Brauner.Hardware.Implementations.ScannerVerify.ScannerA.Core
{
public class ScannerVerifyTypeA : BaseScannerVerify
{
public override event EventHandlerScannerVerify Scanned; //
overwrite with the own handler,

delegate

public override void Scan()
{
BackgroundWorkerScannerTypeA bw = new
BackgroundWorkerScannerTypeA();
bw.RunAsync(new

RunWorkerCompletedEventHandler(RunAsyncBackgroundWorkerCompleted_Scan));
}

private void RunAsyncBackgroundWorkerCompleted_Scan(object sender,

RunWorkerCompletedEventArgs e)
{
BackgroundWorkerScannerTypeA bwSender =
(BackgroundWorkerScannerTypeA)sender;

OnScanned(bwSender.Result);
}


public override void OnScanned(string data)
{
if (this.Scanned != null)
{
data += " noch Zusatz, deshalb override speziell für A";

this.Scanned(this, new NotifyEventArgsHardware(data));
}
}

// Initialize (setup) scanner.
public override void Initialize()
{
}

// Return current state.
public override ScannerState State { get; set; }

// Stop asynch operation.
public override void Stop()
{
}
}

class BackgroundWorkerScannerTypeA :
System.ComponentModel.BackgroundWorker
{
// object

// in parameters

// out parameters
public string Result { set; get; }

// start function
public void RunAsync(RunWorkerCompletedEventHandler completed)
{
this.DoWork += new DoWorkEventHandler(ThreadProc);
this.RunWorkerCompleted += completed;
this.RunWorkerAsync();
}

// thread proc
private void ThreadProc(object sender, DoWorkEventArgs e)
{
BackgroundWorkerScannerTypeA bw =
(BackgroundWorkerScannerTypeA)sender;
System.Diagnostics.Debug.Assert(this == bw);

System.DateTime dtStart = System.DateTime.Now;

// ** ToDo implement - Serial Port, Scanner DataReceived
System.Threading.Thread.Sleep(8000);

bw.Result = "Hallo über BackgroundThread";

System.DateTime dtEnd = System.DateTime.Now;
System.TimeSpan tsDuration = dtEnd.Subtract(dtStart);
double dDuration = tsDuration.TotalMilliseconds;
System.Diagnostics.Trace.TraceInformation("GetScanCode
duration={0} ms", dDuration);
e.Cancel = this.CancellationPending;
}
}
}
 

Lesen sie die antworten

#1 Michaela Brauner
03/05/2010 - 14:18 | Warnen spam
Hallo Stefan,
Hallo an Alle,

hat jemand noch einen guten Tipp zu meinen Fragen.
Ich will einfach die Struktur richtig machen und das halt einigermaßen
zeitgemàß was VS2008 her gibt.
Danke im voraus.

Grüße Michaela

Ähnliche fragen