2010-09-27 4 views
0

У меня есть метод десериализации (XML), который хорошо функционирует до тех пор, пока он не достигнет X количества объектов. Ниже X время, необходимое для десериализации, приемлемо, и пользовательский интерфейс, который заблокирован, не является проблемой. Однако, если количество объектов больше X (относительно маловероятно, но возможно), время загрузки слишком велико. Можно ли перейти от потока пользовательского интерфейса к фоновому потоку, как только десериализация (или любой другой метод) запущена, чтобы я мог разблокировать поток пользовательского интерфейса, если десериализация занимает слишком много времени? спасибоПереключиться на фоновый поток и продолжить выполнение метода

ответ

2

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

Вы можете сделать это в фоновом работнике и использовать результат в RunWorkerCompleted Событие (которое поднимается на потоке пользовательского интерфейса)

+0

спасибо. Думаю, это будет лучший способ. Я изначально не хотел делать все это на bg, потому что пользователь может попытаться получить доступ к объектам до завершения десериализации. Однако, с уведомлением о событии, я могу проверить, выполнено ли это. – XSL

0

Нет, если вы попросили десериализацию из объекта BCL, вы не можете переключить тип потока. Возможно, если бы вы написали свой собственный десериализатор, вы могли бы это сделать, но было бы гораздо эффективнее просто иметь отдельный поток (например, threadpool) для выполнения этой задачи в всех случаях (из-за больших случаев), а не после вы пересекаете границу X.

Смежные вопросы