我有一個列表視圖在winform列表視圖滾動到列表中的最後一個項目時,新消息來了。 我的問題是,當消息在我的客戶端速度如此之快時,我的系統速度很慢,一段時間沒有響應,我的鼠標箭頭更改爲滾輪形狀。如何更快地滾動列表視圖到列表視圖在Winform在c#中的最後一項#
樣本實施例:
for (int i = 1; i < 10000; i++) {
listView1.BeginUpdate();
listView1.Items.Add(a);
listView1.EnsureVisible(listView1.Items.Count - 1);
listView1.EndUpdate();
}
真實案例我的客戶
這個功能是從線程調用當來到新的消息。我的Clint代碼很大,我只顯示此代碼,因爲此代碼用於在列表視圖中顯示消息。
當我們評論滾動線,然後系統性能很好,當我們滾動到最後的消息和消息來時12,000它減慢速度。
private void HandleNewMsg(string msg)
{
if(chkAppend.Checked)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new AppendTextDelegate(HandleNewMsg), new object[] { msg });
}
else
{
// call here to parse the message
ShowMessage(ParseMessage(msg));
}
}
}
而且顯示訊息方法
private void ShowMessage(List<String>MsgReceived){
listview1.BeginUpdate();
foreach(var i in MsgReceived)
{
listview1.Items.Add(i);
}
listView1.EnsureVisible(listView1.Items.Count - 1);
listview1.EndUpdate();
}
而且ParseMessage是
private List<String> ParseMessage(String Message){
List<String> msg=new List<String>();
msg.Add(Message.Substring(0, 13));// title such as msg received
msg.Add("Msg Type " + Message.Substring(41+13 , 4));
msg.Add("p Code " + Message.Substring(65 +13, 2));
msg.Add("*************");
// and other data in it .
return msg;
}
我怎樣才能使它不掛,滾動到最後訊息?
用戶傾向於感謝休息時間,不得不通過成千上萬的項目,可以非常疲憊。創建可用的用戶界面,你不必解決這個問題。看看Google如何呈現一百萬個查詢點擊量。 –
消息如何傳遞?這個例子並沒有顯示真正的問題。顯示真實的代碼。 –
@HansPassant是的,但對於通用解決方案,您需要支持自動分組/摺疊的控件。你必須自己編寫或使用第三方庫,這兩個選項都可能帶來問題。 –