我有一个使用C#构建的控制台应用程序,正在发送电子邮件应用程序。
当某人下订单时,它将向客户发送电子邮件。
这是我的应用程序中的代码:
static void Main(string[] args)
{
int sleepingTime = int.Parse(ConfigurationSettings.AppSettings["SleepInMiliSecond"]);
while (true)
{
StartRunning();
Log("Sleep for a while...");
Thread.Sleep(sleepingTime);
}
//Environment.Exit(0);
}
private static void StartRunning()
{
Log("Process Start Running...");
ProcessWarranty();
CheckEmailSendingResult();
Log("Process End...");
}
我的问题是仅当我单击.exe文件时,该应用程序才能运行。有什么方法可以使它自动发送电子邮件而无需单击.exe文件?
答案 0 :(得分:0)
在这种情况下,我将使控制台应用程序成为服务或后台进程。否则,您将必须具有某种运行exe文件的触发事件。
最简单(也是最肮脏的)方法是使while循环永久运行,该循环检查是否应该发送邮件,在必要时发送邮件,并仅在按ctrl + c或类似的命令时终止。
while(true)
{
if(aNewEmailShouldBeSent)
{
SendEmail("somemail.txt");
Console.WriteLine("I sent an email");
}
//Wait some time in order to "slow down" the loop
Thread.Sleep(10000);
}
如果您想以更合适的方式进行操作,我将推荐Peter Kottas的WindowsService库:https://github.com/PeterKottas/DotNetCore.WindowsService
答案 1 :(得分:0)
您可以在应用程序中使用计时器,并根据计时器间隔发送电子邮件,如下所示:
private static System.Timers.Timer EmailTimer;
static void Main(string[] args)
{
int sleepingTime = int.Parse(ConfigurationSettings.AppSettings["SleepInMiliSecond"]);
EmailTimer = new System.Timers.Timer();
EmailTimer.Elapsed += Timer_Elapsed;
EmailTimer.Enabled = true;
EmailTimer.Start();
}
private static void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
EmailTimer.Enabled = false;
try
{
StartRunning();
}
finally
{
EmailTimer.Enabled = true;
}
}
private static void StartRunning()
{
Log("Process Start Running...");
ProcessWarranty();
CheckEmailSendingResult();
Log("Process End...");
}