我正在創建一個小型Windows窗體應用程序,它將從後臺線程接收消息,然後將它們添加到主窗體上的列表中。在窗體上我有一個的DataGridView與數據源設置爲郵件列表(如List<Message>
)當基礎數據源發生更改時,DataGridView不會在UI中更新
目前,郵件堆積如山,但我不能得到的DataGridView呈現消息。以下是我使用的方法的總結。
1.初始化主要形式設置的結合和startnig消息例程
internal Main(IMessageDispatcher messageDispatcher, IMessagePublisher messagePublisher)
{
InitializeComponent();
_messageEntries = new List<Message>();
BindToMessageEntriesList();
_messageDispatcher = messageDispatcher;
_messageDispatcher.OnMessageReceived += MessageDispatcher_OnMessageReceived;
_messageDispatcher.Start();
}
private void BindToMessageEntriesList()
{
MessageEntriesGrid.DataSource = _messageEntries;
}
2.過程接收的消息並將其添加到內部列表
private void MessageDispatcher_OnMessageReceived(Message message)
{
lock (_logEntries)
{
_messageEntries.Add(message);
}
var cb = new RefreshListCallbackDelegate(RefreshView);
this.Invoke(cb);
}
3。刷新主線程
private void RefreshView()
{
MessageEntriesGrid.Refresh();
}
任何人都可以建議如何讓我的UI可以反映出他們發生的變化。
注:我也嘗試使用Invalidate方法和ResetBindings方法。我也嘗試過使用的BindingList
代替List
列表切換到ObservableCollection
您是否試圖將您的列表設置到BindingSource中,並將BindingSource設置爲Gird的源。 BindingSource是保持同步的東西 – MBen 2012-07-09 23:06:55