2016-10-05 13 views
0

私はWPF MVVMアプリケーションでのViewModelクラスのフィールドとしてConcurrentQueueを定義します。なぜConcurrentQueue.Enqueueメソッドは値を追加しませんか?

以下
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レコードオブジェクトが作成され、データで正常に埋められます。私はデバッガでチェックします。なぜ値がコレクションに追加されないのですか?なぜこのような状況が起こりますか?この問題を解決するのを手伝ってください。

+0

このキューのアイテムをデキューするのは誰ですか? –

+0

同じクラスのメソッド。このメソッドは、内部の並列TPLタスクです。 – Prohor

答えて

1

私はOPに尋ねました:このキューのアイテムをデキューするのは誰ですか?、OP回答:同じクラスのメソッド。このメソッドは、内部の並列TPLタスクです。

キューの数をチェックする時間のために、いくつかの並列タスクがすでにキューに入れられたアイテムをデキューしました!

+0

はい、本当に。コレクションへの追加は正しい方法で動作します。ありがとうございました。 – Prohor

+0

@Prohor問題はありません;) –

関連する問題