亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c# richtextbox更新大量數(shù)據(jù)不卡死的實現(xiàn)方式

 更新時間:2024年04月17日 10:03:54   作者:noworrycd  
這篇文章主要介紹了c# richtextbox更新大量數(shù)據(jù)不卡死的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前言

c# 的richtextbox對讀入幾十萬行大數(shù)據(jù)或者頻繁更新經??ㄋ澜缑鎺追昼?。

終于找到一個通過子線程更新的方法, 實際測試對于40萬行可以在10秒內完成更新, 并且運行中界面不卡死可以操作。

一、richtextbox更新方法

richtextbox更新有兩種更新方法:

richtextbox.appendtext() 和 richtextbox.text = richtextbox.text + str。

在子線程中可使用 richtextbox.text = richtextbox.text + str。

為了提高效率, 使用了StringBuilder sb進行緩沖, 每maxDisplayline行更新一次richtextbox, 并根據(jù)行數(shù)增加動態(tài)調整了maxDisplayline的大小。

二、使用步驟

代碼如下(核心代碼):

        maxDisplayline = 1 * 1000; // 1000行
       StringBuilder sb = new StringBuilder();
        Stopwatch swGlobal = new Stopwatch();
        string[] sblineslist = in_str.Split(new char[] { '\n' }); // instr 為輸入字符串,可以是文件讀入的
        // static readonly object lockSb = new object();

        richTextBoxDisplay.Focus();
        sb.Clear();
        Thread.Sleep(1);

        
        swGlobal.Reset(); swGlobal.Start();

        Thread t = new Thread((ThreadStart)delegate
          {
              try
              {
                  for (int i = 0; i < sblineslist.Length; i++)
                  {
                      if (stopSign)
                      {
                          return;
                      }

					// lock(lockSb)
                      sb.Append(sblineslist[i] + "\n");

                      if (i > 0 && i % maxDisplayline == 0)
                      {
                          this.Invoke((EventHandler)delegate { labelStatus.Text = "狀態(tài): " + count + "/" + manualSyncFilesFullname.Count + " " + runsecond + "s -> " + (i + 1) 
                              + " Act/Rest: " + swGlobal.ElapsedMilliseconds/1000 + "/" + (int)(1.0 * swGlobal.ElapsedMilliseconds * (sblineslist.Length - (i+1)) /(i+1) /1000) + "s";
                              labelStatus.Update(); });

                          if (sb.Length > 0)
                          {
          						// lock(lockSb)
                              this.richTextBoxDisplay.Text = this.richTextBoxDisplay.Text + sb.ToString();
                              sb.Clear();
                          }

                          maxDisplayline = maxDisplayline * ((int)Math.Sqrt(i/ maxDisplayline));
                      }
                  }

                  if (sb.Length > 0)
                  {
   						// lock(lockSb)
                      this.richTextBoxDisplay.Text = this.richTextBoxDisplay.Text + sb.ToString();
                      sb.Clear();
                  }
                  this.Invoke((EventHandler)delegate { labelStatus.Text = "狀態(tài): " + count + "/" + manualSyncFilesFullname.Count + " " + runsecond + "s -> " + sblineslist.Length.ToString()
                      +" Act: " + swGlobal.ElapsedMilliseconds / 1000 + "s";
                      labelStatus.Update(); });
              }
              catch (Exception ex)
              {
                  try
                  {
                      stopSign = true;
                      this.Invoke((EventHandler)delegate { labelStatus.Text = "異常錯誤: " + ex.Message; labelStatus.Update(); });
                  }
                  catch { }
              }
        });

        t.IsBackground = true;
        t.Start();
        Thread.Sleep(33);

        while (!stopSign && t != null && t.IsAlive)
        {
            Application.DoEvents();
            Thread.Sleep(3);
        }

總結

richtextbox.text 支持在子線程中直接操作和訪問。

如果需要多線程并發(fā)交互更新,需要在操作sb的時候加鎖。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 不使用qvod播放器獲取qvod播放路徑的方法

    不使用qvod播放器獲取qvod播放路徑的方法

    這篇文章主要介紹了使用c#獲取qvod播放路徑的方法,大家參考使用吧
    2014-01-01
  • C#執(zhí)行EXE文件與輸出消息的提取操作

    C#執(zhí)行EXE文件與輸出消息的提取操作

    這篇文章主要介紹了C#執(zhí)行EXE文件與輸出消息的提取操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • c#數(shù)據(jù)綁定之向查詢中添加參數(shù)(.Net連接外部數(shù)據(jù)庫)

    c#數(shù)據(jù)綁定之向查詢中添加參數(shù)(.Net連接外部數(shù)據(jù)庫)

    本實例主要練習了ADO.Net連接到外部數(shù)據(jù)庫的基礎上,向查詢中添加參數(shù)。使用的是ACCESS數(shù)據(jù)庫
    2014-04-04
  • 使用C#壓縮PNG、JPEG和TIFF圖像的方法

    使用C#壓縮PNG、JPEG和TIFF圖像的方法

    圖像壓縮是一種常用的減小圖像大小的方法,它可以讓您分別最小化存儲和傳輸圖像所需的空間和時間,有各種壓縮技術可用來壓縮圖像,而不會降低圖像的質量,根據(jù)這一點,這篇文章為您提供了一些使用 C# 以編程方式壓縮PNG、JPEG和TIFF圖像的簡單方法
    2024-12-12
  • C#中自定義高精度Timer定時器的實例教程

    C#中自定義高精度Timer定時器的實例教程

    這篇文章主要介紹了C#中自定義高精度Timer定時器的實例教程,多線程的Timer編寫需要注意線程安全的問題,需要的朋友可以參考下
    2016-04-04
  • C#實現(xiàn)塊狀鏈表的項目實踐

    C#實現(xiàn)塊狀鏈表的項目實踐

    這篇文章主要介紹了C#實現(xiàn)塊狀鏈表的項目實踐,通過定義塊和鏈表類,利用塊內元素引用實現(xiàn)塊與塊之間的鏈接關系,從而實現(xiàn)對塊狀鏈表的遍歷、插入和刪除等操作,感興趣的可以了解一下
    2023-11-11
  • C#操作DataGridView獲取或設置當前單元格的內容

    C#操作DataGridView獲取或設置當前單元格的內容

    這篇文章介紹了C#操作DataGridView獲取或設置當前單元格的內容,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#圖像偽彩色處理方法

    C#圖像偽彩色處理方法

    這篇文章主要介紹了C#圖像偽彩色處理方法,涉及C#操作圖像的偽彩色相關技巧,需要的朋友可以參考下
    2015-04-04
  • C#面向對象編程中依賴反轉原則的示例詳解

    C#面向對象編程中依賴反轉原則的示例詳解

    在面向對象編程中,SOLID?是五個設計原則的首字母縮寫,旨在使軟件設計更易于理解、靈活和可維護。本文將通過實例詳細講講C#面向對象編程中依賴反轉原則,需要的可以參考一下
    2022-07-07
  • C#串口通信程序實例詳解

    C#串口通信程序實例詳解

    在.NET平臺下創(chuàng)建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空間是System.IO.Ports,創(chuàng)建C#串口通信程序的具體實現(xiàn)是如何的呢?讓我們開始吧
    2013-12-12

最新評論