Предотвратить завершение консоли с помощью ctrl-C или нескольких нажатий клавиши enter, когда консоль выполняет асинхронную задачу?
Привет ребята,
Как предотвратить выход консоли во время выполнения асинхронной задачи или в режиме ожидания.Задержка (миллисекунды)?
В настоящее время на моем основном:
Sub Main(ByVal args() As String) If args.Length <> 0 Then Dim i As Integer = 0 While i < args.Length If (args(i)) = "config" Then HideConsole() System.Windows.Forms.Application.EnableVisualStyles() System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(False) System.Windows.Forms.Application.Run(New formsettings) End If i = i + 1 End While Else ShowConsole() MaximizeConsole() Trace.Listeners.Clear() Dim twtl As New TextWriterTraceListener(AppDomain.CurrentDomain.BaseDirectory & "out.txt") twtl.Name = "TextLogger" twtl.TraceOutputOptions = TraceOptions.ThreadId Or TraceOptions.DateTime Dim ctl As New ConsoleTraceListener(False) ctl.TraceOutputOptions = TraceOptions.DateTime Trace.Listeners.Add(twtl) Trace.Listeners.Add(ctl) Trace.AutoFlush = True Trace.WriteLine("Program started at " & DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss:fff")) ConsoleStartup() Console.ReadKey() End If End Sub
Где ConsoleStartup именно там задача будет выполняться по интервалу. Скажем, каждые один час:-
Private Sub ConsoleStartup() Try Do tmr_repeat = TimeSpan.Parse(My.MySettings.Default.Interval).TotalMilliseconds For i = 1 To 7 Console.WriteLine(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss:fff") & " > Checking for Line: {0}", i) dt_local = ShowTotalCount(objlocalconn, i) Await CompareValue(i) Next Dim date1 As Date = Date.Now Dim toadd As Integer = TimeSpan.Parse(My.MySettings.Default.Interval).TotalSeconds Dim date3 As Date = date1.AddSeconds(toadd) Console.WriteLine(DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss:fff") & " > Timer restarted. Next batch process {0}", date3.ToString(dateFormat)) Await Task.Delay(tmr_repeat) Loop Catch ex As Exception End Try End Sub
В настоящее время всякий раз, когда я нажимаю Ctrl-C или случайно нажимаю клавишу Enter 2 раза, она внезапно завершает работу консоли, даже если консоль выполняет какую-то задачу асинхронного цикла. Я попробовал какой-то код, но не работает, и даже я застрял на размещении кода и слиянии с моим ConsoleStartup Sub
Что я уже пробовал:
Sub Main(ByVal args() As String)
Dim t As Task = MainAsync(args)
Т.Ждать()
Конец Подводной Лодки
Частная функция MainAsync(ByVal args () As String) As Task
ShowConsole()
MaximizeConsole()
След.Слушатели.Четкий()
Dim twtl как новый TextWriterTraceListener(AppDomain.CurrentDomain. BaseDirectory & "out.txt")
твтл.Имя = " TextLogger"
твтл.TraceOutputOptions = TraceOptions.ThreadId Или TraceOptions.значение datetime
Dim ctl как новый ConsoleTraceListener (False)
ctl.TraceOutputOptions = TraceOptions.значение datetime
След.Слушатели.Добавить (twtl)
След.Слушателей.Добавить(ПНО)
След.Автосброс = Истина
След.Метода WriteLine("программа была начата на" &усилителя; дата и время.Сейчас.Метод toString("ДД-ММ-гггг чч:мм:СС:ФФФ"))
ConsoleStartup()
Приставка.ReadKey()
Конечная Функция