Как обновить таймер GUI перед запуском долгосрочного кода? - PullRequest
0 голосов
/ 23 апреля 2019

Программа для подсчета слов в текстовых файлах.У меня есть две формы.Form1 о выборе файлов и слов.Эти данные я передаю в form2, где я запускаю таймер GUI и алгоритм подсчета слов.Но алгоритм выполняется быстрее, чем загруженный таймер графического интерфейса.

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

Класс Form2

1 Ответ

1 голос
/ 23 апреля 2019

Вместо блокировки потока пользовательского интерфейса с помощью CountWords, запустите этот метод в фоновом потоке, используя пул потоков

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

Затем убедитесь, что все вызовы элементов управления пользовательского интерфейса перенаправляются обратно в поток пользовательского интерфейса, который вы делаетеиз фонового потока:

        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 добавит элемент в поток пользовательского интерфейса:

    private void AddItemToListView(string item)
    {
        listView1.Items.Add(item);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...