我需要用一个TextBox来显示频繁变化的多行文本,(比如滚动显示网络上不断传来的文本信息),我用mytextbox.Text = "<the-new-text>";结果发现,显示倒是没问题,只是该程序几乎不响应其他事件了。如何才能改善这一性能问题?

解决方案 »

  1.   

    并且,当网络上接收到的文本累计到一定时候,比如10G, 必然超出 TextBox  的显示能力,如何才能让 TextBox 只现实最近收到的1000 行而显示速度仍然可以接受呢?我用 VC++ 6.0 写过这种功能的程序,就是把接收到的数据砍掉头部,留1000行,效果不错,在 C#.net 里边却效果差很多。
      

  2.   

    试试用异步的方法显示private delegate bool ShowTextDelegate();
    dlg = new ShowTextDelegate(this.ShowTextRun);
    result = dlg.BeginInvoke(new AsyncCallback(this.ShowTextEnd), this);
    private bool ShowTextRun()
    {
        mytextbox.Text = "<the-new-text>";
    }
    private void ShowTextEnd(IAsyncResult result)
    {
    }
      

  3.   

    用个Queue对象来管理最近的1000行private Queue q = new Queue();
    public void AddText(string s)
    {
        q.Enqueue(s);
        if(q.Count > 1000) q.Dequeue();
    }
      

  4.   

    在ShowTextRun中,需要处理已经在处理显示的情况基本就是用一个标志来表示当前已经在显示文本了显示文本时,如果在显示文本,那么当前的现实结束在ShowTextEnd的过程中要再次确认一下当前文本是否最新
    (可以用一个计数器来记录当前显示的文本行数)如果是旧的,那就再次调用显示文本这个自己控制吧,不是很复杂的
      

  5.   

    保留一部分内容在textbox中显示,其他的保存到本地文件,然后根据需要动态load出来
      

  6.   

    to James Fay: 其实我已经是这么做的,但因为还是要频繁更改,效果不好。挑刺的建议不错。
    我打算创建一个user control,把Textbox改掉。因为改文本内容是,旁边的滚动条上下乱跳。