2009-08-27 103 views
0

嗨我创建了一个小应用程序来移动一些文件并将它们放入数据库中。除了应用程序需要超时之外,这很好。在.net桌面应用程序中设置超时

如果我的应用程序在2小时内未完成任务,它会重新打开并锁定所有内容。我需要说的是,如果我的应用程序已经打开2小时关闭它。

一个想法是,你可以在应用程序中设置超时时间。我有一个这样的谷歌,并发现了一些东西在system.threading有关超时=无限和threading.sleep = 200,但不真的明白这一点。

另一个想法是,使用计时器和计数长达2小时,然后调用一个关闭方法,这个接缝就像一个骗子。

任何想法上用C#或VB


超时可悲的是,这不是一个数据库连接,这不是该应用程序的失败。

回答

1

如何让只有一个应用程序实例同时运行?

我想你正在调度运行:看看这段代码,作为防止应用程序的多个实例而不改变调度的方法。

static void Main(string[] args) 
{ 
    Mutex flag = new Mutex(false, "UNIQUE_NAME"); 
    bool acquired = flag.WaitOne(TimeSpan.FromMilliseconds(0)); // 0 or more milliseconds 
    if (acquired) 
    { 
     Console.WriteLine("Ok, this is the only instance allowed to run."); 

     // do your work, here simulated with a Sleep call 
     Thread.Sleep(TimeSpan.FromSeconds(5)); 

     flag.ReleaseMutex(); 
     Console.WriteLine("Done!"); 
    } 
    else 
    { 
     Console.WriteLine("Another instance is running."); 
    } 
    Console.WriteLine("Press RETURN to close..."); 
    Console.ReadLine(); 
} 

请不要放弃你的互斥... ;-)

HTH

0

另一种选择呢?设置一个标志,说明过程当前是否正在运行。

如果进程正在运行,则不要启动第二个或关闭的第一个,也可以设置一个计时器,并几分钟后再次检查(?)

+0

这可以工作,但如果申请属于过去,失败,这不会删除标志,它会不跑 – Paul 2009-08-27 09:54:40

0

也许为的DbConnection/DbCommand和超时对象是更合适(看看MSDN)