【问题标题】:C# create client side as a windowsserviceC#将客户端创建为windowsservice
【发布时间】:2016-02-05 07:13:41
【问题描述】:

我正在做一个 windowsService 程序,它每隔 A 秒自动截屏并将其设置在 dir 上。当我运行它时,它只工作一次。 我怎样才能做到?这是我的代码。

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);
}

【问题讨论】:

  • 一开始你就打电话给timer1_Tick一次。不要那样做 - 改为启动计时器:timer1.Start(); 它会打勾并每次调用timer1_Tick
  • 对不起我的英语有点糟糕!你想说这样 #protected override void OnStart(string[] args) { timer1.Start(); timer1_Tick(); }#
  • 是的,没错。我们仍然需要在 A 秒过去之前进行初始调用

标签: c#


【解决方案1】:

在您的 OnStart 方法中删除对 timer1_tick 的调用并添加它:

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

前提是您已经将滴答事件附加到计时器。

【讨论】:

  • 是的,我知道,但是,当我运行它时,它只调用了一个 OnStar 方法!
  • OnStart 方法是服务初始化程序。它总是只运行一次。
  • @NoName 方法OnStart 预计只运行一次。您可以将timer1 设置为多次执行timer1_Tick,而不是调用timer1_Tick。如果您确实设置了timer1,但您的事件仍然存在问题,则可能是timer1_Tick 方法没有正确绑定到timer1 的Tick 事件。在这种情况下,请参阅My answer to How to change the name of an existing event handler?
【解决方案2】:
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
    }

【讨论】:

  • 虽然可以回答您自己的问题,但这不是答案。如果您想为您的问题添加信息,您可以对其进行编辑。另外,这个网站不是一个论坛——你已经参观了,你应该掌握它。您可以随时删除此答案。
  • 好的。我知道 Theraot,首先我在添加信息后看到了你的答案,我是这个网站的新手,所以我没有足够的关于这个网站的信息。
  • 我的英语也不好
  • 我知道你是新人。这就是我告诉你的原因。目的是保持网站清洁。特别是理想的情况是:一个问题在上面(需要所有细节),然后是各种答案。答案的顺序可能会改变。评论主要是为了澄清。此外,我们鼓励高质量的答案。编辑:cmets 也可以编辑,只要它们不够老。
  • 好的。非常感谢@Theraot。我欠你 :) !我尝试在高温下这样做,如果我事先犯了错误,我很抱歉
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 2010-10-15
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多