我想創建一個列表中所有項目的FIFO隊列。我需要從隊列中檢索列表中的項目。需要製作一個項目列表的動態先進先出隊列
這是我的代碼:
using System.Collections.Generic;
namespace CHPCanControl
{
public class signals
{
public double quant;
public int Ind;
public int Subin;
public int Control;
public int dat;
public List<signals> signalList;
public signals(double quant, int Ind, int Subin, int Control, int dat)
{
this.quant = quant;
this.Ind = Ind;
this.Control = Control;
this.Subin = Subin;
this.dat = dat;
}
}
public class Controlsignal
{
public List<signals> signalList = new List<signals>(); // this is my first list
public void main()
{
signalList.Add(new signals(1, 1000, 1, 0x60, 1));
signalList.Add(new signals(1, 1000, 2, 0x60, 1));
signalList.Add(new signals(1, 1000, 3, 0x60, 1));
signalList.Add(new signals(1, 1000, 4, 0x60, 1));
signalList.Add(new signals(0.5, 1000, 5, 0x60, 200));
signalList.Add(new signals(1, 1000, 6, 0x60, 1));
signalList.Add(new signals(1, 1000, 7, 0x60, 1));
signalList.Add(new signals(0.0625, 1000, 8, 0x60, 1));
signalList.Add(new signals(0.1, 1000, 9, 0x60, 1));
signalList.Add(new signals(0.1, 1000, 10, 0x60, 1));
}
}
public class Statussignal
{
public List<signals> signalList1 = new List<signals>(); // this is my second list
public void main()
{
signalList1.Add(new signals(1, 1100, 1, 0x40, 1));
signalList1.Add(new signals(1, 1100, 2, 0x40, 1));
signalList1.Add(new signals(1, 1100, 3, 0x40, 1));
signalList1.Add(new signals(0.0002, 1100, 4, 0x40, 1));
signalList1.Add(new signals(0.5, 1100, 5, 0x40, 200));
signalList1.Add(new signals(1, 1100, 6, 0x40, 1));
signalList1.Add(new signals(1, 1100, 7, 0x40, 1));
signalList1.Add(new signals(1, 1100, 8, 0x40, 1));
}
}
}
我的問題是,我想補充一個FIFO隊列我兩個列表的項目。我在想我可能需要從多個線程訪問隊列。
謝謝你,我想用這種方式做回覆很球員,但我不知道是不是正確或不..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Threading;
namespace CHPCanControl
{
public partial class Form1 : Form
{
Controlsignal control = new Controlsignal();
Statussignal status = new Statussignal();
Calibrationparameters calibration = new Calibrationparameters();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// need to do something here by which you will receieve
// your messages here from the ECU
Thread thread = new Thread(new ThreadStart(this.ECU_Send));
thread.Start();
thread.IsBackground = true;
}
public void ECU_Send()
{
private Queue<control.signalList> queue = new Queue<control.signalList>();
public event EventHandler Changed;
protected virtual void OnChanged()
{
if(Changed != null)
{
Changed(this,EventArgs.Empty);
}
}
public int Count { get { return queue.Count; } }
public virtual void Enqueue(control.signalList item)
{
queue.Enqueue(item);
OnChanged();
}
public virtual void Dequeue()
{
control.signalList item = queue.Dequeue();
OnChanged();
return item;
}
}
}
使用'隊列'而不是列表。 –
Mir
如果您希望它更安全,可以使用'ConcurrentQueue'或'BlockingCollection'。 – Servy
非常感謝你們的回覆我還在上面添加了我的代碼,請看看這個 – user1465977