0

我在 WPF MVVM 应用程序中将 ConcurrentQueue 定义为 ViewModel 类字段:

private ConcurrentQueue<AGC_DataRecordToSave> _agcAbsoluteDataRecordsToSaveBuf = new ConcurrentQueue<AGC_DataRecordToSave>();

下面是 AGC_DataRecordToSave 定义:

/// <summary>
/// Structure of record to write in CSV-file.
/// </summary>
public class AGC_DataRecordToSave
{
    #region Public Fields

    /// <summary>
    /// Date
    /// </summary>
    public DateTime Data;
    /// <summary>
    /// Time
    /// </summary>
    public TimeSpan Time;
    /// <summary>
    /// Measuring Ultrasonic Beam.
    /// </summary>
    public int MeasuringBeam;
    /// <summary>
    /// Direction.
    /// </summary>
    public string Direction;
    /// <summary>
    /// Value from outer device.
    /// </summary>
    public double Value;

    #endregion
}

然后在 System.Windows.Threading.DispatcherTimer 滴答处理程序(在同一个类中)中,我执行以下操作:

AGC_DataRecordToSave record = new AGC_DataRecordToSave();
record.Data = new DateTime(this._currentDate.Date.Ticks);
record.Time = this._currentDate.TimeOfDay;
record.MeasuringBeam = 1;
record.Direction = "P1AB";
record.Value = automaticGainControl;
this._agcAbsoluteDataRecordsToSaveBuf.Enqueue(record);

并且 _agcAbsoluteDataRecordsToSaveBuf 保持为空(计数 == 0)。所以 ConcurrentQueue.Enqueue 方法不会将值添加到集合中。AGC_DataRecordToSave 记录对象已成功创建并填充数据。我在调试器中检查它。为什么不将值添加到集合中?为什么会出现这种情况?请帮助解决这个问题。

4

1 回答 1

1

我问 OP:谁让这个队列上的项目出队?, 和 OP 回答:同一个类中的方法。此方法在并行 TPL 任务中。.

因此,在您检查队列计数时,一些并行任务已经将排队的项目出队!

于 2016-10-05T08:47:44.383 回答