2016-10-05 2 views
0

내 WPF MVVM 응용 프로그램의 뷰 모델 클래스 필드로 ConcurrentQueue을 정의 : 다음ConcurrentQueue.Enqueue 메소드가 값을 추가하지 않는 이유는 무엇입니까?

/// <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에서 핸들러을 선택합니다 (같은에서 : 아래

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

는 AGC_DataRecordToSave 정의입니다 클래스) 나는 다음을 수행는 :

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 문제 없음;) –

관련 문제