0

質問:

リッチテキストボックスに対してフラッシュのような関数を実行できますか?

理由:

ループを使用して一度に ~20 ~ 40 行のテキストをリッチテキスト ボックスに書き込んでいます。問題は、その間に GUI 全体がフリーズし、すべてがリッチテキスト ボックスに書き込まれ、コードが移動するまで何も表示されないことです。フリーズを避けるために、可能であれば各行をすぐに画面に書き込みたいです。コンソールで aFileStream.Flush() コマンドを使用してこの機能を実行できることを知っています。aFileStream.appendtext() に同様の関数はありますか? 私の googleFu は今日弱く、このオンラインの例を見つけることができません。どんな助けでも大歓迎です。

サンプルコード:

 foreach (string fullPath in appDataDirectories)
                {
                    //update progess bar
                    progresbarupdate();
                    //split file path in to parts
                    string[] folders = fullPath.Split('\\');
                    //print out create time for directory
                    DateTime creationTimeUtc = Directory.GetCreationTimeUtc(fullPath);
                    String ctime = creationTimeUtc.ToString();
                    //create String
                    String printable = String.Format("{0,-50}\t{1}", ctime, fullPath);
                    output.AppendText(printable + "\n");
                }
4

2 に答える 2

2

フラッシュによって RichTextBox の解凍を達成できるとは思わない

BackgroundWorkerを使用して、別のスレッドでバックグラウンドでいくつかの作業を行ってから、RichTextBox の Text アクションを呼び出すことができます。

RichTextBox がフリーズしないことを示す私の例を参照してください

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        BackgroundWorker bg = new BackgroundWorker();
        bg.DoWork += new DoWorkEventHandler(bg_DoWork);
        bg.RunWorkerAsync();
    }

    void bg_DoWork(object sender, DoWorkEventArgs e)
    {
        for (int i = 0; i < 1000000000; i++)
        {
            Action action = () => richTextBox1.Text += "Line Number " + i;
            richTextBox1.Invoke(action); 
        }
    }
}
于 2012-07-27T20:40:51.657 に答える
1

最善の策は、これを別のスレッドで処理し、BeginInvoke メソッドを使用して必要なテキストを書き込むことです。これにより、メイン UI の応答性が維持されます。

http://msdn.microsoft.com/en-us/library/0b1bf3y3.aspx

于 2012-07-27T20:44:06.073 に答える