0
概念性問題: 我在後臺有時會輸出一些對象的服務,所以我想在GUI中向用戶顯示輸出。我應該使用哪種控制? Listview,因爲每個處理過的項目會有一行罰款,或者Textbox輸出?限制輸出到最新記錄,如何?
我應該從服務中保留哪些物品?在隊列中?但是,我怎樣才能輕鬆地將它綁定到控件上,以便最老的被刪除(FIFO)?任何優雅的想法如何最好地實現這一點?
概念性問題: 我在後臺有時會輸出一些對象的服務,所以我想在GUI中向用戶顯示輸出。我應該使用哪種控制? Listview,因爲每個處理過的項目會有一行罰款,或者Textbox輸出?限制輸出到最新記錄,如何?
我應該從服務中保留哪些物品?在隊列中?但是,我怎樣才能輕鬆地將它綁定到控件上,以便最老的被刪除(FIFO)?任何優雅的想法如何最好地實現這一點?
我只是添加我的解決方案,很好地工作:
public class SlidingBuffer<T> : IEnumerable<T>
{
private readonly Queue<T> _queue;
public int QueueMax { get; private set; }
public SlidingBuffer(int maxCount)
{
QueueMax = maxCount;
_queue = new Queue<T>(maxCount);
}
public void Add(T item)
{
if (_queue.Count >= QueueMax)
{
_queue.Dequeue();
}
_queue.Enqueue(item);
}
public IEnumerator<T> GetEnumerator()
{
return _queue.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
而且類綁定到ListBox中的項目
public class SlidingItem
{
public SlidingItem(string text, int number)
{
Text = text;
Number = number;
TimeStamp = DateTime.Now;
Id = ++ItemsProcessed;
}
private static int _itemsProcessed;
public int ItemsProcessed
{
get { return _itemsProcessed; }
set { _itemsProcessed = value; }
}
public int Id { get; set; }
public string Text { get; set; }
public int Number { get; set; }
public DateTime TimeStamp { get; set; }
public string ShowMembers()
{
return string.Format("{0}\t{1}\t{2}\t{3}", TimeStamp.ToString("G", CultureInfo.CurrentCulture), Number, Text, Id);
}
public override string ToString()
{
return ShowMembers();
}
}
最後:
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = _controller.SlidingBuffer;
listBoxOutput.DataSource = bindingSource;
listBoxOutput.DisplayMember = "ShowMembers";
鑑於有限的信息,我不明白任何選擇都不如下一個任意選擇。投票結束。 – 2013-03-08 14:20:13
而不是關閉這個,@Rolf,從概念中拉出一些東西:服務如何將對象發送到UI程序(直接交叉線程通信,文件,數據庫等),它只是字符串數據正在使用等? – Tory 2013-03-08 14:28:34
好吧,我想我會運行一個BackGroundWorkerThread(或其他線程)來偵聽來自db的通知。這將對變更做一些工作。從處理的數據中,我將創建一個包含日期,狀態和一些文本等字段的通知對象。這個通知對象最終會顯示在GUI上(一個字符串,幾列,還不確定),我想Invoke會這樣做。主要的是我不斷地收到通知,但我只想顯示最新的通知(FIFO)並綁定控制,其他所有內容都在日誌中。達到此目的的最佳方法是什麼? – Rolfi 2013-03-08 15:03:35