Показать окно с индикатором выполнения при выполнении работы - PullRequest
1 голос
/ 30 сентября 2010


Поскольку у меня есть инструмент, который должен выполнять большую часть работы в один момент, я хочу показать окно с текстом и индикатор выполнения во время выполнения работы.

Моя проблема в том, что из-за огромной нагрузки работы окно никогда не рисуется и не обновляется.

Я знаю, что мне обычно нужно использовать дополнительный поток для работы, но я должен использовать 2 коллекции и службу базы данных из текущего потока.

Текущий код похож на

StatusWindow SW = new StatusWindow();
StatusViewModel SVM = new StatusViewModel();

SVM.MaxNum = BigNumber;

SW.Show();

for (int i=0; i<BigNumber; i++)
{
    List<AType> ItemsToCreate = Func1();
    List<AType> ItemsToDelete = Func2();

    foreach (AType cItem in ItemsToCreate)
        DB.CreateItem(cItem);

    foreach (AType cItem in ItemsToDelete)
        DB:DeleteItem(cItem);

    SVM.CurrentNum = i;
}
SW.Close();

Я также читал об Диспетчере, но я не думаю, что он очень удобен в этом сценарии, так как доступ к основному потоку будет слишком большим.

Есть предложения?
Спасибо

Ответы [ 2 ]

2 голосов
/ 30 сентября 2010

Я рекомендую прочитать статью ( Создание более отзывчивых приложений с помощью Dispatcher ) из журнала MSDN, в которой описано, как WPF работает с Dispatcher при использовании BackgroundWorker.

1 голос
/ 30 сентября 2010

Вы можете передавать две коллекции и все, что вам захочется, в рабочие потоки, если к объектам, к которым вы обращаетесь, можно получить доступ из разных потоков.

int[] arrayofInt = new int[10]
ThreadPool.QueueUserWorkItem(s =>
        {
            //access the array in the worker thread
            arrayofInt[0] = 10;
        });

Когда вы закончите работу, вам нужно отправить сообщение в диалоговое окно, что оно должно быть закрыто сейчас. Сделайте это, запустив событие в вашем потоке, которое обрабатывается вашим диалогом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...