Eine Frage zu FIFO Function
-
Hallo zusammen,
ich benötige eine FIFO. Dafür habe ich einfach folgendes Code probiert.
Leider liefert die Funktion Dequeue() immer wieder den letzten Datensatz zurück.
a) löst die Daten Nicht.
b) Fängt nicht vom ersten Datensatz aus.Was mache ich falsch.
Vielen Dank im Voraus.
namespace FIFO_Test
{
public partial class Form1 : Form
{
Queue myQ = new Queue();private MyVector ImageV2 = new MyVector();
int Datensatz = 0;
public Form1()
{InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Bitmap BmpTest=null;
ImageV2.Bild = BmpTest;ImageV2.Path = "Daten" + Datensatz.ToString();
Datensatz++;
myQ.Enqueue(ImageV2);
}private void Form1_Load(object sender, EventArgs e)
{}
private void button3_Click(object sender, EventArgs e)
{
int x=myQ.Count;MyVector T = (MyVector)myQ.Dequeue();
string strPath = T.Path;
}private class MyVector
{
public Bitmap Bild;
public string Path;}
}
}
-
"Was mache ich falsch. "
Grauenhafte Rechtschreibung, keine Code-Tags, keine Formatierung.
-
Du packst eine Instanzvariable der Klasse ins Queue... Was erwartest Du denn wenn Du das immer gleiche Objekt in ein Queue packst?
-
Wie kriegt ich 2 unterschiedliche Datensätze, die zusammen gehören als Objekt in der Queue speichern.
Mit einer Variable funktioniert.
Danke.
-
Ich glaube das wird nichts mehr. Verwende doch wenigstens Code-Tags und Formatierung, wenn Du schon kein Deutsch kannst und zu faul bist ein Wörterbuch zu benutzen. Das macht es den Lesern wesentlich einfacher.
Du fügst immer wieder die eine Referenz auf das Objekt hinter ImageV2 in die Queue ein, statt neue Objekte in button1_Click() zu erstellen. Alle Elemente in der Queue verweisen auf das gleiche Objekt.
MyVector ImageV2 als Feld der Form ist überflüssig und in dem Fall sogar fehlerverursachend.Kurzum: Du bist in die beliebte Falle getappt, zu missachten, dass C# bei Instanzen einer Klasse eine Referenzsemantik hat.
(Am Rande: Verwende das Generic Queue<T> aus System.Collections.Generic)
Unreflektierte Problemlösung: Nimm MyVector ImageV2 aus der Klasse und erstelle mit new MyVector in button1_Click() bei jedem Click ein neues Objekt.
-
OK, ich versuch mal deinen Vorschlag umzusetzen.