如何在长期代码开始之前更新GUI计时器?

时间:2019-04-23 12:15:43

标签: c# winforms

程序用于计数txt文件中的单词。 我有两种形式。 Form1是关于选择文件和单词的。那些传递给form2的数据将在其中启动GUI计时器和用于计数单词的算法。但是算法的执行速度比加载GUI计时器快。

private void Form2_Load(object sender, EventArgs e)
{
    CountWords();
}

Form2 class

1 个答案:

答案 0 :(得分:1)

不是使用CountWords阻止UI线程,而是使用Threadpool在后台线程上运行此方法

    private void Form2_Load(object sender, EventArgs e)
    {
        ThreadPool.QueueUserWorkItem(
            new WaitCallback(CountWords));
    }

然后,确保将对UI控件的所有调用编组回您从后台线程进行的UI线程:

        foreach (KeyValuePair<string, int> word in words)
        {
            // Need to marshal this back onto the UI thread
            var itemToAdd = word.Key + " " + word.Value + "x";
            this.BeginInvoke(new Action<string>(AddItemToListView), itemToAdd);
        }

然后我们的AddItemToListView方法将该项添加到UI线程上:

    private void AddItemToListView(string item)
    {
        listView1.Items.Add(item);
    }