目前我正在从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
}
}
}
我应该在哪里放置循环代码? :(
提前感谢任何重播!!!
答案 0 :(得分:8)
在表单中添加一个计时器:
将其Interval
属性设置为60000(一分钟,以毫秒为单位),将Enabled
设置为True
:
并将事件处理程序附加到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 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模式都应该是这样的
一般来说,你有两个选择:
是的,正如其他人提到的那样,你应该使用计时器。但这应该在您知道代码应该位于何处之后。您还可以使用无限循环进行睡眠呼叫。但计时器是一个更好的解决方案
答案 7 :(得分:0)
计时器的想法更好。但是如果你想使用线程。然后按照
进行操作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();
}