c#每分钟循环 - 在哪里放置代码?

时间:2012-07-16 07:50:24

标签: c#

目前我正在从Java转向c#,我充满了疯狂的问题。 我正在Windows窗体应用程序上尝试新的东西,现在,我想创建一个循环,它每1分钟执行一次代码,问题是我不知道在哪里放这个代码。 例如,表单结构如下:

using System;

namespace Tray_Icon
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            notifyIcon1.ShowBalloonTip(5000);


        }

        private void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
        {
            label1.Text = "Baloon clicked!";
        }

        private void notifyIcon1_BalloonTipClosed(object sender, EventArgs e)
        {
            label1.Text = "baloon closed!";
        }

        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {

        }

        private void option1ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //some code here
        }

        private void option2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //some code here
        }

        private void option3ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            label1.Text = "Option 3 clicked!";
        }

        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            option1ToolStripMenuItem_Click(this, null);
        }

        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnWrite_Click(object sender, EventArgs e)
        {
//code here

        }
    }
}

我应该在哪里放置循环代码? :(

提前感谢任何重播!!!

8 个答案:

答案 0 :(得分:8)

在表单中添加一个计时器:

enter image description here

将其Interval属性设置为60000(一分钟,以毫秒为单位),将Enabled设置为True

enter image description here

并将事件处理程序附加到Timer.Tick事件,例如通过双击窗体设计器中的计时器:

private void timer1_Tick(object sender, EventArgs e)
{
    // do something here. It will be executed every 60 seconds
}

答案 1 :(得分:6)

您必须添加一个计时器,并将间隔设置为1000毫秒,并在OnTick事件中使用循环添加代码

Timer tmr = null;
    private void StartTimer()
    {
       tmr = new Timer();
       tmr.Interval = 1000;
       tmr.Tick += new EventHandler<EventArgs>(tmr_Tick);
       tmr.Enabled = true;
    }

    void tmr_Tick(object sender, EventArgs e)
    {
        // Code with your loop here
    }

答案 2 :(得分:0)

你不能在这里放任何循环代码。

在您的设计师中寻找Timer控件。如果有,请将其配置为每分钟运行一次,并将代码放在Timer_Tick事件中。

或者在代码中手动创建一个计时器并响应事件:)但对于初学者来说,设计师这样做更容易!

答案 3 :(得分:0)

在窗体上拖动Timer组件并双击它。你去了代码。

Timer组件在主线程中运行,因此您可以修改UI组件而无需担心。

或者您可以创建一个System.Timers.Timer,它具有自己的线程并具有一些优势,但在修改UI组件时可能需要注意。见http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

答案 4 :(得分:0)

尝试使用Background Worker并将代码放入backgroundWorker.DoWork或使用计时器

答案 5 :(得分:0)

使用System.Timers.Timer

System.Timers.Timer aTimer;

{
    aTimer = new System.Timers.Timer();
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval = 60000;
    aTimer.Enabled = true;
}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}

使用Timer请参阅本教程:C# Timer

答案 6 :(得分:0)

你是如何在Java平台上做到的?

我认为Java应该与.net相同。
实际上,表单程序只是包含事件调度程序的普通程序。事件调度程序侦听UI事件并将它们分派给事件处理程序。我认为无论是Java还是.net平台,所有的UI模式都应该是这样的

一般来说,你有两个选择:

  1. 开始时开始循环。在这种情况下,您应该插入您的 表单构造函数中的代码。
  2. 用户启动循环     单击按钮。在这种情况下,您应该在中插入代码     事件处理函数。
  3. 是的,正如其他人提到的那样,你应该使用计时器。但这应该在您知道代码应该位于何处之后。您还可以使用无限循环进行睡眠呼叫。但计时器是一个更好的解决方案

答案 7 :(得分:0)

计时器的想法更好。但是如果你想使用线程。然后按照

进行操作
  1. 我假设你想从程序开始就做好
  2. 您可以将名为Form1_Load的函数体(事实上的事件)写为
  3. 您的实际代码仅在while循环内,其他代码仅用于指导
  4. 如果你不知道在C#
  5. 中使用线程,我可以指导
    bool button2Clicked = false;
    private void Form1_Load(object sender, EventArgs e)
    {    
        // A good Way to call Thread
        System.Threading.Thread t1 = new System.Threading.Thread(delegate()
        {
           while (!button2Clicked)
           {
              // Do Any Stuff;
              System.Threading.Thread.Sleep(60000);  //60000 Millieconds=1M
           }
        });
        t1.IsBackground = true;  // With above statement Thread Will automatically
        // be Aborted on Application Exit
        t1.Start();
    }