Lev*_*Lev 29 .net c# vb.net visual-studio-2010
如何在解决方案中的启动项目之间添加一些延迟?

我希望在启动WindowsService 2-3秒后启动Client项目.
为什么我需要这个?
WindowsService运行套接字服务器,客户端运行套接字以连接到服务器.WindowsService加载速度比客户端慢,当连接到尚未运行的服务器时,这会在客户端导致异常
Jon*_*eet 29
我可能会在客户端中添加一个重试机制.这样,它不仅有助于"从Visual Studio启动"的情况 - 如果服务器恰好在真实客户端连接时重新启动,它也会有所帮助.服务器在更快的机器上的事实并不意味着服务器永远不需要重新启动,是吗?
实际上,您可能希望以这样一种方式添加此重试机制,即使服务器在连接时重新启动,客户端也可以恢复.当然,这取决于项目的进展情况.
Rom*_*ain 13
您可以使用Mutex锁定来同步两个启动项目.
计划1(StartUp Project 1):
namespace ConsoleApplication1
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
class Program1
{
private static bool isNewMutexCreated = true;
private static Mutex mutex;
static void Main(string[] args)
{
mutex = new Mutex(true, "Global\\ConsoleApplication1", out isNewMutexCreated);
AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit);
Console.WriteLine("Application1 executed on " + DateTime.Now.ToString());
Console.ReadKey();
}
static void CurrentDomain_ProcessExit(Object sender, EventArgs e)
{
if (isNewMutexCreated)
{
Console.WriteLine("Mutex Released");
mutex.ReleaseMutex();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
计划2(StartUp Project 2):
namespace ConsoleApplication2
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
class Program2
{
static void Main(string[] args)
{
Mutex mutex = null;
Thread.Sleep(5000);
while (mutex == null)
{
try
{
mutex = Mutex.OpenExisting("Global\\ConsoleApplication1");
}
catch (Exception)
{
Console.WriteLine("Mutex not found on " + DateTime.Now.ToString());
Thread.Sleep(3000);
}
}
Console.WriteLine("Application2 executed on " + DateTime.Now.ToString());
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 9
在多个启动项目的情况下,它们按照既不同时也不随机指定的顺序加载.
http://msdn.microsoft.com/en-us/library/09138bex(v=vs.90).aspx
所以,如果你在"窗口服务"之后指定"客户",那么它可能会很好地锻炼.如果您不想获得上面建议的编码方式,那么(仅用于测试)您可以在所需的延迟后手动将"客户端"过程附加到您的解决方案中. http://msdn.microsoft.com/en-us/library/c6wf8e4z(v=vs.100).aspx
另一个更简单的测试选项是,如果调试器是这样附加的话,只是延迟客户端:
if (System.Diagnostics.Debugger.IsAttached)
{
System.Threading.Thread.Sleep(2000);
}
Run Code Online (Sandbox Code Playgroud)
#if DEBUG如果你愿意,你可以将它包装在一个块中.无论如何,我认为这应该是最少的工作量:)