2016-02-05 59 views
2

我正在做一个windows服务程序,它是每秒自动捕获屏幕并将其设置为目录。当我运行它只有一次。 我该怎么做?这是我的代码。C#创建客户端作为Windows服务

protected override void OnStart(string[] args) 
{ 
    timer1_Tick(); 
} 
private void timer1_Tick() 
{ 
    string myDir = "c:\\Newfolder\\photo"; 
    System.IO.Directory.CreateDirectory(myDir); 
    Bitmap bitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height); 
    Graphics graphics = Graphics.FromImage(bitmap as Image); 
    graphics.CopyFromScreen(0, 0, 0, 0, bitmap.Size); 
    string fileName = string.Format(@"c:\Newfolder\photo\Screenshot" +"_" + DateTime.Now.ToString("(dd_MMMM_hh_mm_ss_tt)") + ".png"); 
    bitmap.Save(fileName, ImageFormat.Png); 
} 
+2

开始时你调用'timer1_Tick'一次。不要这样做 - 开始计时器:'timer1.Start();'它会每次打勾并调用'timer1_Tick' – ASh

+2

对不起我的英文很烂!你想这样说#保护覆盖void OnStart(string [] args) { timer1.Start(); timer1_Tick(); }# –

+0

是的,没错。我们仍然需要在秒通过之前的初始呼叫 – ASh

回答

1

在你的OnStart方法去除调用timer1_tick并添加此相反:

timer1.enabled = true; 
timer1.interval = 10000; //change this to whatever you need 
timer1.Start(); 

这是提供您已经附着蜱事件定时器。

+1

是的,我知道这一点,但是,当我运行它打电话给OnStar方法只有一个! –

+1

OnStart方法是服务初始值设定项。它将始终只运行一次。 –

+0

@NoName方法'OnStart'预计只运行一次。您可以设置'timer1'来多次执行'timer1_Tick',而不是调用'timer1_Tick'。如果你确实设置了'timer1',并且对你的事件仍然有问题,那么'timer1_Tick'方法可能并不正确地绑定到'timer1'的Tick事件。在这种情况下,请参阅[我的答案如何更改现有事件处理程序的名称?](http://stackoverflow.com/a/20734571/402022) – Theraot

1
static void Main() 
    {if DEBUG 
     Service1 Myservice = new Service1(); 
     Myservice.OnDebug(); 
     System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);else 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
     { 
      new Service1() 
     }; 
     ServiceBase.Run(ServicesToRun);endif 
    } 
+1

我该如何解决它? –

+1

虽然可以回答你自己的问题,但这不是一个答案。如果你想添加信息到你的问题,你可以编辑它。此外,这个网站不是论坛 - 你已经参加了巡回演讲,你应该有一个这样的论述。您可以随时删除此答案。 – Theraot

+1

好的。我知道Theraot,首先我在添加信息后看到了你的答案,而我是这个网站的新手,所以我没有足够的有关本网站的信息。 –