Постоянно работает приложение


Любые идеи о том, как постоянно запускать приложение? Я пыталась следовать рекомендациям из этой ссылке, но безуспешно. Это может быть из-за моего кодирования, но я не знаю как это исправить. Кто-то предложил мне использовать службу Windows, но я не хочу, чтобы использовать его в этот момент, потому что я хочу, чтобы научиться основам первой, как в приведенной выше ссылке.

Программы.в CS

        static int exitFlag = 0;

        private static int m_intErrCounter = 0;
        static int Main(string[] args)
        {
            int retValue = 0;

            while (exitFlag != 0)
            {
                retValue = CounterApp();
            }
            //return retValue;
            return 0;
        }

        public static int CounterApp()
        {
            string machineName = ConfigurationManager.AppSettings["MachineName"];
            string categoryName = ConfigurationManager.AppSettings["CategoryName"];
            string counterName = ConfigurationManager.AppSettings["CounterName"];
            string instanceName = ConfigurationManager.AppSettings["InstanceName"];
            PerformanceCounterCategory pcc;
            PerformanceCounter[] counters;
            m_intErrCounter = 0;

            try
            {
                // Create the appropriate PerformanceCounterCategory object.
                if (machineName.Length > 0 && instanceName.Length > 0)
                {
                    pcc = new PerformanceCounterCategory(categoryName, machineName);
                    counters = pcc.GetCounters(instanceName);
                }
                else
                {
                    pcc = new PerformanceCounterCategory(categoryName);
                    counters = pcc.GetCounters();
                }

            }
            catch (Exception)
            {
                Console.WriteLine("Couldn't found the application");
                Console.ReadKey();
                return 0;
            }

            String strBody = String.Empty;
            if (counters.Length != 0)
            {

                for (int objX = 0; objX < counters.Length; objX++)
                {
                    if ((counters[objX].CounterName == counterName) && (counters[objX].RawValue > 0))
                    {
                        strBody = "Error occured at " + counters[objX].InstanceName.ToString();
                        strBody += " : " + counters[objX].CounterName.ToString() + " thrown " + counters[objX].RawValue.ToString() + " times.";
                        m_intErrCounter++;
                        exitFlag = 1;
                    }
                }
            }
            if (m_intErrCounter > 0)
            {
                SendMail("Notification Email", strBody);
                exitFlag = 1;
            }
            return exitFlag;
        }

        private static void SendMail(String strSubj, String strBody)
        {
            MailSettingsSectionGroup mMailSettings = new MailSettingsSectionGroup();
            string mMailFrom = mMailSettings.Smtp.From;
            string mMailHost = mMailSettings.Smtp.Network.Host;
            int mMailPort = mMailSettings.Smtp.Network.Port;
            string mMailUserName = mMailSettings.Smtp.Network.UserName;
            string mMailPassword = mMailSettings.Smtp.Network.Password;

            string to = ConfigurationManager.AppSettings["To"];

            MailMessage Message = new MailMessage();
            Message.From = new MailAddress(mMailFrom);
            Message.To.Add(new MailAddress(to));

            Message.Subject = strSubj;
            Message.Body = strBody;

            SmtpClient client = new SmtpClient(mMailHost, mMailPort);

            client.EnableSsl = false;
            client.Credentials = new System.Net.NetworkCredential(mMailUserName, mMailPassword);

            client.Send(Message);
            Console.WriteLine("Success Send Message");
        }
    }
}


10718
1
c#
задан 22 августа 2011 в 01:08 Источник Поделиться
Комментарии
1 ответ

Ваш цикл не работает, потому что начальное значение exitFlag переменной (которая используется как условие для цикла) равен нулю, и это только будучи установленным в 1 соответствии со специальным набором обстоятельств, которые, видимо, не происходит при запуске приложения.

Если вы действительно хотите бесконечный цикл и прекратить применение, когда это не ваш цикл, ваш функция возвращает 1, если он терпит неудачу. Это должно выглядеть примерно так:

int Main(string[] args)
{
while (CounterApp() != 0)
{
}
return 0;
}

public static int CounterApp()
{
// do some stuff

try
{
// do some stuff that might fail
}
catch (Exception)
{
return 0;
}

// do some other stuff

return 1;
}

2
ответ дан 22 августа 2011 в 06:08 Источник Поделиться