2015-08-14 31 views
0

我想知道如何在我的控制台应用中使用c#来最好地实现SetTimeout如何在控制台应用程序中最好地实现SetTimeout?

我的方案是:

我使用SOAP客户端上传CSV文件,因为文件的大小是大的,我得到返回超时异常。

这很好,因为在这个阶段,我希望我的控制台应用程序暂停15分钟,然后再继续工作,因为我需要等待文件上传。

此外,如果15分钟后文件仍未上传,我想检查每分钟以确保文件已上传。

因此,关键是有一个15分钟的SetTimeout(如JavaScript),并检查文件是否上传,否则每分钟检查文件是否上传。

实现此目的的最佳方法是什么?

我曾尝试:

private Timer _timer; 

_timer.Interval = ((1000 * 60) * 15); 
_timer.Elapsed += IntervalElapsed; 
_timer.Start(); 

的IntervalElapsed方法如下:

private void IntervalElapsed(object sender, ElapsedEventArgs e){ 
    _timer.stop(); 
    // check if file has been uploaded 
    var isFileUploaded = HasFileBeenUploaded(); 

    while(!isFileUploaded){ 
     // perform setInterval until file has been uploaded 
    } 
} 

但是我IntervalElapsed方法不会被调用,控制台应用程序关闭。

+0

你应该做的是,在Windows服务,控制台应用程序不适合这样的任务 –

回答

2

你可以用它代替Elapsed方法简单Sleep的方法来实现自己的目标

const int MINUTE = 1000 * 60; 
static void Main(string[] args) 
{ 
    System.Threading.Thread.Sleep(15 * MINUTE);   
    while(!HasFileBeenUploaded()) 
    {    
    System.Threading.Thread.Sleep(MINUTE); 
    } 
} 

--SJ

+0

嘿谢谢,我试过这个并且工作:) – Kush

-3

你可能需要有东西从关闭一旦你完成设置计时器停止应用程序,也许尝试在你的代码的结束,这将等待用户输入之前加入

Console.ReadLine(); 

收盘。

+0

对不起忘了要提到这将是一个自动化的计划任务,将每天运行,因此不能允许用户输入 – Kush

+0

好吧,那么可能有一个标志,你设置任务完成时,并有一个while循环运行,直到标志设置为true? –

+0

看到有一个while循环将是一个大问题,因为它不断尝试检查Web服务以查看文件是否已上传,这听起来不是一个好主意。抱歉。 – Kush

相关问题