kenny_lebt
Grünschnabel
Hi,
ich bin neu im Forum und bedanke mich im Voraus für eure Hilfe!
Also ich habe folgendes Problem:
Ich erzeuge in der Klasse FTDI folgendes Objekt Reader (FTDIReadThread). Anschließend
starte ich mit this.Reader.StartThread(); den gewünschten Thread und soweit funktioniert auch alles. Rufe ich jetzt jedoch die Methode erzeugtesObjekt.close() (in FTDI enthalten auf) kennt er das Reader-Objekt nicht (es ist null), obwohl es mit public/private FTDIReadThread Reader; korrekt deklariert wurde. D.h. mein Thread läuft weiter..
Bitte um Hilfe! Bin schon ziemlich verzweifelt..
Vielen Dank
kenny_lebt
ich bin neu im Forum und bedanke mich im Voraus für eure Hilfe!
Also ich habe folgendes Problem:
Ich erzeuge in der Klasse FTDI folgendes Objekt Reader (FTDIReadThread). Anschließend
starte ich mit this.Reader.StartThread(); den gewünschten Thread und soweit funktioniert auch alles. Rufe ich jetzt jedoch die Methode erzeugtesObjekt.close() (in FTDI enthalten auf) kennt er das Reader-Objekt nicht (es ist null), obwohl es mit public/private FTDIReadThread Reader; korrekt deklariert wurde. D.h. mein Thread läuft weiter..
Code:
public abstract class FTDIThreadControl
{
private readonly object locker = new object();
private bool stopRequired = false;
private bool isStopped = false;
public bool IsStopped
{
get
{
lock (locker) { return isStopped; }
}
protected set
{
lock (locker) { isStopped = value; }
}
}
public bool IsStopping
{
get
{
lock (locker) { return stopRequired; }
}
}
public void Stop()
{
lock (locker) { this.stopRequired = true; }
}
}
Code:
class FTDI
{
private int OK = 0;
private int ERROR = 1;
private FT_HANDLE ftHandle;
public FTDIReadThread Reader;
/// <summary>
/// Öffnet eine Verbindung und startet den Thread..
/// </summary>
public int open()
{
//Öffnet das USB-Gerät..
FTDIInterface.FT_STATUS ftStatus;
ftStatus = FTDIInterface.FT_Open(0, ref ftHandle);
//..und startet wenn alles OK war den Thread.
if (ftStatus == FTDIInterface.FT_STATUS.FT_OK)
{
this.Reader = new FTDIReadThread(ftHandle);
this.Reader.StartThread();
return OK;
}
else
return ERROR;
}
/// <summary>
/// Beendet den Thread und schließt eine offene Verbindung..
/// </summary>
public int close()
{
FTDIInterface.FT_STATUS ftStatus;
this.Reader.EndThread();
this.Reader = null;
ftStatus = FTDIInterface.FT_Close(ftHandle);
if (ftStatus == FTDIInterface.FT_STATUS.FT_OK)
return OK;
else
return ERROR;
}
Code:
class FTDIReadThread : FTDIThreadControl
{
Thread backgroundThread;
FT_HANDLE ftHandle;
public void StartThread()
{
if (this.backgroundThread == null || (this.backgroundThread != null &&
!this.backgroundThread.IsAlive))
{
this.backgroundThread = new Thread(new ThreadStart(this.read));
this.backgroundThread.IsBackground = true;
this.backgroundThread.Name = "RXThread";
this.backgroundThread.Start();
}
}
public void EndThread()
{
base.Stop();
}
private void read()
{ ...
try
{
while (!base.IsStopping)
{
if (base.IsStopping)
break;
...
finally
{
base.IsStopped = true;
}
}
}
Bitte um Hilfe! Bin schon ziemlich verzweifelt..
Vielen Dank
kenny_lebt