Относительно вашего комментария. Попробуйте этот пример получить данные, используя запрос MongoDB. db.collection.find({ checkinDetails: { presenceTable: { priorityDevice : { branchId :"e63a5343-871c-47ee-8fe6-31d9b7f9fa1b1"} } } })
Дополнительную информацию вы можете найти здесь: https://docs.mongodb.com/manual/tutorial/query-embedded-documents/
Необходимо, вероятно, назвать те методы в другом потоке, если они занимают много времени. Исследуйте использование BackgroundWorker для помощи Вам.
Кроме того, могло случиться так, что это из-за принтеров окон и не Вашего кода (Вы используете сетевой принтер? если так, изменение в виртуальном принтере и видит, изменяет ли это что-нибудь).
Другая опция вращала бы новый поток UI:
ThreadStart ts = () =>
{
printDocument.Print();
// Start the message loop to prevent the thread from finishing straight away.
System.Windows.Forms.Application.Run();
};
Thread t = new Thread(ts);
t.SetApartmentState(ApartmentState.STA);
t.Start();
Следует иметь в виду, что этот код не тестируется и, возможно, нуждается в некоторой настройке (особенно часть цикла сообщения) - и Вы могли бы также хотеть иметь в виду, что необходимо будет закрыть поток в некоторое время - поэтому, возможно, Вы могли бы хотеть, чтобы класс обработал взаимодействие и пожизненное управление.
метод ShowDialog создает модальное окно, он блокирует основной поток. Выставочный метод создает немодальное окно, он не блокирует основной поток.
Когда Вы звоните
this.printDocument. Печать ();
это снова делает свою работу в основном потоке.
Чтобы сделать это в фоновом потоке, Вы могли попробовать что-то как (первое, что пришло на ум)
ThreadPool. QueueUserWorkItem ((obj) => this.printDocument. Печать ());
это использует новый поток для печати документа вместо основного потока GUI.
Если Вы хотите знать больше, необходимо исследовать поточную обработку
ТВ Dot-Net-Rocks (dnrtv) покрывает, как выполнить вещи в фоновом потоке для хранения потока GUI свободным в эпизоде 16.