В настоящее время я работаю над программным обеспечением, которое использует сборку из другого отдела.
я называю метод из этой сборки, как это:Отменить выполнение команды, если она занимает слишком много времени.
using (var connection = (IConnection) Factory.GetObject(typeof (IConnection)))
Код, используемый для работы прекрасно. Но за последние несколько минут казалось, что моя программа ничего не делает, когда я пытался ее запустить. Нажатие паузы во время отладки показало мне, что она «застряла» на линии выше.
Я предполагаю, что они просто выполняют какое-то обслуживание или что-то в этом роде, но здесь дело не в этом.
Так что, хотя было бы неплохо сообщить пользователю, что пошло не так, если программа не запускается. Что-то простое, как
MessageBox.Show("Could not connect", "Connection Error");
И затем закройте программу. Мой вопрос:
Как завершить выполнение команды через определенное время и перепрыгнуть куда-нибудь еще?
Мое предположение будет перемещать его в отдельный поток, а затем помещать вызывающий поток в спящий режим на несколько секунд, после чего он избавляется от лишнего потока, если он еще не завершен. Но это кажется действительно грязным для меня, и там должен быть лучший способ.
Если ваш 'IConnection' является' SqlConnection', вы можете использовать таймаут соединения по умолчанию, предоставляемый вместе с ним. –
@ Kilanny, хотя использование очень похоже, это не SqlConnection, и никто, похоже, не пытался реализовать тайм-аут. – Wilsu
В противном случае используйте «Таймер», чтобы проверить выполнение, когда тайм-аут должен прекратить работу –