防止winform应用程序冻结

时间:2015-06-28 22:32:35

标签: c# winforms devexpress

我正在使用一个小型桌面应用程序来搜索字符串中的文本,并在richtextbox中显示搜索到的段落,并在其上创建超链接。因此通过使用超链接用户可以轻松地在textfile / docx文件中达到欲望段落等。

问题:在执行for循环以创建搜索段落的超链接并在richtextbox中显示它时,我的界面冻结我放松了对表单和表单控件的控制,我想我需要使用一些线程模型,有没有想法,我该如何解决这个问题?

下面是我尝试在richtextbox中创建超链接的代码,我在这里告诉你,我正在使用devexpress richtextedit(richtextbox)。

for (int i = 0; i < split.Length; i++)
        {
            Task.Factory.StartNew(() =>
            {
                linkRange = richEditControl1.Document.AppendText(split[i] + "\n\n");
                hyperlink = richEditControl1.Document.CreateHyperlink(linkRange); 
            });
        }

我也尝试下面的代码,但它没有解决我的问题。

for (int i = 0; i < split.Length; i++)
        {
            Action showMethod = delegate() 
            { 
              linkRange = richEditControl1.Document.AppendText(split[i] + "\n\n"); 
              hyperlink = richEditControl1.Document.CreateHyperlink(linkRange); 
            };
        }

1 个答案:

答案 0 :(得分:1)

使用Async / Await功能。

private async void YourMethod()
{
        //...
        for (int i = 0; i < split.Length; i++)
        {
           linkRange = richEditControl1.Document.AppendText(split[i] + "\n\n");
           hyperlink = richEditControl1.Document.CreateHyperlink(linkRange);
           await Task.Delay(50); // wait a moment here so win can perform other operations and will not freeze.
        }
}

您可能希望减少延迟或增加延迟。