2017-04-04 48 views
0

我收集電話傳感器數據,並將其塞進開始爲每個傳感器正是如此特定類的對象的列表:轉換的選擇對象的列表的一個數組,同時正在被修改的列表

public class accbuff 
    { 
     public double ax { get; set; } 
     public double ay { get; set; } 
     public double az { get; set; } 
     public long acct { get; set; } 
    } 

我然後追加每個新的傳感器讀數事件(e.Values)和時間戳到列表正是如此:

   accList.Add(new accbuff 
       { 
        ax = e.Values[0], 
        ay = e.Values[1], 
        az = e.Values[2], 
        acct = stopwatch.ElapsedMilliseconds 
       }); 

最後,在設定的時間段之後欲列表內容傳遞給一些科學計算方法我有,然後清除列表並重置計時器。

這是我需要幫助的地方。清除列表或重置計時器沒有問題,但我無法從列表中複製數據,因爲在枚舉副本到數組時,新的傳感器讀數會修改列表。

傳感器讀數發生在大約500hz。如果我嘗試如下所示,則由於修改而導致枚舉錯誤。

long[] at = accList.Select(x => x.acct).ToArray(); 
stopwatch.Restart(); 
accList.Clear(); 

我知道我可以將其鎖定,但我真的不希望有傳感器讀數的縫隙,而我的列表複製爲進一步使用陣列。任何進行的策略都會很有幫助。謝謝!

回答

1

您需要選擇屬性之前創建您的List的單獨副本,而列表更新:

var listCopy = accList.ToList(); 

然後使用listCopy

long[] at = listCopy.Select(x => x.acct).ToArray(); 
stopwatch.Restart(); 
accList.Clear(); 

你也可以快捷整個事情:

long[] at = accList.ToList().Select(x => x.acct).ToArray(); 
stopwatch.Restart(); 
accList.Clear(); 
+0

完美 - 非常感謝您的幫助。 –

3

我希望這有助於:

long[] at = accList.ToList().Select(x => x.acct).ToArray(); 
stopwatch.Restart(); 
accList.Clear(); 
+0

完美 - 非常感謝您的幫助。 –

相關問題