#c#
#c#
Вопрос:
я могу запустить таймер, но он зависает, когда я запускаю фоновый режим, мне нужно, чтобы таймер запускался в фоновом режиме. кто-нибудь может сказать мне, как запустить таймер в фоновом режиме. Мой код таймера
btnIntraday.Enabled = false;
btnStartBackfill.Enabled = false;
btnStop.Enabled = true;
if (btnIntraday.Text == "Intraday")
{
timerIntraday.Interval = 5000;
timerIntraday.Enabled = true;
btnIntraday.Text = "Updating..";
}
else if (btnIntraday.Text == "Updating..")
{
timerIntraday.Enabled = false;
btnIntraday.Text = "Intraday";
}
и мой фоновый код
btnIntraday.Enabled = false;
btnStartBackfill.Enabled = false;
btnStop.Enabled = true;
txtInterval.Text = ddTimeInterval.Value.ToString();
int inter = (int.Parse(txtInterval.Text)) * multiplyingFactorBackfill;
try
{
bgBackfillDCX.RunWorkerAsync();
}
catch (Exception ex)
{
}
кто-нибудь, пожалуйста, может сказать мне, как запустить таймер в фоновом режиме.
Заранее спасибо.
Комментарии:
1. Могу я спросить, что делает этот код? как вызвать RunWorkerAsync() сам по себе (рекурсивно)?
Ответ №1:
Вы можете использовать BackgroundWorker.
Обработайте BackgroundWorker.Не трудитесь, чтобы запустить свой таймер.
Обработайте BackgroundWorker.Изменен прогресс для обработки событий синхронизации.
Обработайте BackgroundWorker.RunWorkerCompleted для остановки таймера.
Комментарии:
1. я могу работать в фоновом режиме, но он не запускается автоматически
2. @voipservicesolution: Что вы имеете в виду !??
3. мне нужно непрерывно запускать приложение без зависания. есть ли какой-нибудь способ непрерывно работать в фоновом режиме
4. @voipservicesolution: У вас возникли проблемы с использованием BackgroundWorker?
5. это мой фоновый код btnIntraday. Включено = false; btnStartBackfill. Включено = false; btnStop.Включено = true; txtInterval. Текст = ddTimeInterval.Значение. toString(); int inter = (int.Parse(txtInterval.Text)) * Умножающий коэффициент обратного заполнения; попробуйте {bgBackfillDCX.RunWorkerAsync(); } catch (Исключение ex) { } но он не выполняется непрерывно в таймере, он выполняется непрерывно, но зависает
Ответ №2:
Я думаю, вы хотите сказать, что хотите отключить фоновый код, а затем периодически заставлять ЕГО выполнять некоторую работу. Если это так, вам нужен таймер в фоновом коде, а не во внешнем интерфейсе. Что означает использование другого класса таймера в системе.Таймеры, IIRC. Система.Таймеры.Таймер
Ответ №3:
Если вы настаиваете на том, чтобы таймер работал во внешнем интерфейсе (хотя я этого не рекомендую, я понимаю, что в некоторых сценариях это проще), есть способ (примечание: я предполагаю, что используются Windows Forms):
В следующем коде есть:
- таймер, ссылающийся на экземпляр System.Windows.Формы.Объект Timer
- значок уведомления, ссылающийся на систему экземпляров.Windows.Формы.Объект NotifyIcon
- Метод MainWindow_Resize, связанный с событием изменения размера формы
- Метод notifyIcon_Click, связанный с событием Click в NotifyIcon
Метод изменения размера if-block выполняется, когда пользователь сворачивает форму (форма нигде не отображается на рабочем столе, а установка ShowInTaskbar в значение false также скрывает ее на панели задач, поэтому она эффективно скрыта).
private void MainWindow_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.ShowInTaskbar = false;
notifyIcon.Visible = true;
}
}
Когда пользователь нажимает значок уведомления, окно формы восстанавливается до прежнего размера и положения, и форма выводится пользователю
private void notifyIcon_Click(object sender, EventArgs e)
{
notifyIcon.Visible = false;
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
this.BringToFront();
this.Activate();
}