Здравствуйте, justas_ms, Вы писали:
_>В программе использую NotifyIcon, но при некорректном завершении работы иконка остается в трее. Есть вариант сделать эмуляцию проведения мышки (пока не знаю как правильно это реализовать в шарпе). Может кто подскажет еще какие-нибудь варианты?
что значит "некорректном " — если это убивание процесса, то ничего не исправите, если это у вас программа падает — делать надо что бы не падала, или падала но правильно
Доброго дня,
Язык программирования C#. Есть два вопроса.
Первый:
Не могу нормально завершить работу таймера.
Вызов:
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Interval = 3000;
timer1.Start();
Обработка:
private void timer1_Tick(object sender, EventArgs e)
{
string otvetServera = CConnect.Connect(); // Получение ответа от сервераif (otvetServera == "Error") // Если ответ Error
{
timer1.Stop(); // Останавливаем таймер
MessageBox.Show("Проблема с сервером");
//exitFlag = true;return; // Остановка обработки
}
MessageBox.Show(otvetServera); // Если все нормально выдаем ответ
}
По return происходит переход на строку string otvetServera = CConnect.Connect(); А необходимо выйти из обработчика, не вызывая сторонние функции.
Второй:
В программе использую NotifyIcon, но при некорректном завершении работы иконка остается в трее. Есть вариант сделать эмуляцию проведения мышки (пока не знаю как правильно это реализовать в шарпе). Может кто подскажет еще какие-нибудь варианты?
Заранее спасибо за ответы.
Re[2]: Правильно остановить таймер и обновление трея
Здравствуйте, Kalina9001, Вы писали:
_>>По return происходит переход на строку string otvetServera = CConnect.Connect(); А необходимо выйти из обработчика, не вызывая сторонние функции.
K>Может так? K>
K> private void timer1_Tick(object sender, EventArgs e)
K> {
K> timer1.Stop(); // Останавливаем таймер
K> string otvetServera = CConnect.Connect(); // Получение ответа от сервера
K> if (otvetServera == "Error") // Если ответ Error
K> {
K> MessageBox.Show("Проблема с сервером");
K> return; // Остановка обработки
K> }
K> else
K> {
K> timer1.Start();
K> }
K> MessageBox.Show(otvetServera); // Если все нормально выдаем ответ
K> }
K>
Всеж не то, переход происходит на timer1.Stop();, т.е. получается опять не выходит, а повторяет все с первой строки.
Re[3]: Правильно остановить таймер и обновление трея
_>Всеж не то, переход происходит на timer1.Stop();, т.е. получается опять не выходит, а повторяет все с первой строки.
незнаю как такое может происходить, но делайте тогда так:
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop(); // Останавливаем таймер string otvetServera = CConnect.Connect(); // Получение ответа от сервераif (otvetServera == "Error") // Если ответ Error
{
MessageBox.Show("Проблема с сервером");
}
else
{
timer1.Start();
MessageBox.Show(otvetServera); // Если все нормально выдаем ответ
}
}
Re[3]: Правильно остановить таймер и обновление трея
Здравствуйте, justas_ms, Вы писали: _>Всеж не то, переход происходит на timer1.Stop();, т.е. получается опять не выходит, а повторяет все с первой строки.
Странно, попробовал:
public partial class Form1: Form
{
Timer timer1;
public Form1()
{
InitializeComponent();
timer1 = new Timer();
timer1.Tick +=new EventHandler(timer1_Tick);
timer1.Interval = 3000;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop(); // Останавливаем таймер string otvetServera = "Error";
if(otvetServera == "Error") // Если ответ Error
{
MessageBox.Show("Проблема с сервером");
return; // Остановка обработки
}
else
{
timer1.Start();
}
MessageBox.Show(otvetServera); // Если все нормально выдаем ответ
}
}
В функцию timer1_Tick заходит только одит раз
CConnect.Connect() — Это случаем не ассинхронно выполняется?
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
Re[4]: Правильно остановить таймер и обновление трея
Здравствуйте, justas_ms, Вы писали:
_>>>По return происходит переход на строку string otvetServera = CConnect.Connect(); А необходимо выйти из обработчика, не вызывая сторонние функции.
А Вы это под отладчиком смотрите? Скорее всего таймер успевает сработать ещё раз, пока Вы проходите метод пошагово.