带有计时器经过时间的c#组合框
我有一个程序可以禁用锁屏并停止windows中的服务。我有两个按钮启用,禁用和一个组合框,有预设的时间。当我的程序运行且用户单击“启用”时,程序应禁用锁定屏幕,直到用户手动执行 单击“禁用”。我试图做到的是,如果用户从未点击“禁用”,则程序不会整夜运行。因此,通过从组合框中选择预设时间,程序将自动禁用它带有计时器经过时间的c#组合框,c#,.net,windows,.net-3.5,C#,.net,Windows,.net 3.5,我有一个程序可以禁用锁屏并停止windows中的服务。我有两个按钮启用,禁用和一个组合框,有预设的时间。当我的程序运行且用户单击“启用”时,程序应禁用锁定屏幕,直到用户手动执行 单击“禁用”。我试图做到的是,如果用户从未点击“禁用”,则程序不会整夜运行。因此,通过从组合框中选择预设时间,程序将自动禁用它 public partial class Form1 : Form { public Form1() { InitializeComponent();
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DateTime time = DateTime.Today;
for (DateTime _time = time.AddHours(16); _time < time.AddHours(18); _time = _time.AddMinutes(30))
{
comboBox1.Items.Add(_time.ToShortTimeString());
}
}
private static System.Timers.Timer _Timer;
private DateTime _lastRun = DateTime.Now;
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string strTime_Start = DateTime.Today.ToString();
string strTime_End = comboBox1.SelectedItem.ToString();
}
public void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
button2.Enabled = true;
_Timer = new System.Timers.Timer(10 * 60 * 1000);
_Timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
DisableLock();
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (strTime_End < DateTime.Now.Date) //I think this would be where I need to have strTime_End?
{
_Timer.Stop();
_lastRun = DateTime.Now;
}
}
}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
DateTime time=DateTime.Today;
for(DateTime _time=time.AddHours(16);_time
根据我目前的理解,您可以添加:
comboBox1.Enabled=false
当时间过去时,即在事件中。根据我到目前为止的理解,您可以添加: comboBox1.Enabled=false
当时间过去时,即在事件中。我认为最简单的解决方案是为停止时间保留一个实例变量,并且您设置的每个组合框项都会设置此停止时间,timer\u tick事件只会检查它是否已过该时间。组合框中的空白项可以清除变量
private DateTime timeToStop;
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
timeToStop = DateTime.Now.Add(DateTime.Parse(comboBox1.Text));
}
catch(Exception)
{
timeToStop = new DateTime(3000, 01, 01, 00, 00, 00);
}
}
public void disableButton_Click(object sender, EventArgs e)
{
_Timer.Stop();
_lastRun = DateTime.Now;
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (DateTime.Now >= timeToStop)
{
_Timer.Stop();
_lastRun = DateTime.Now;
// Disable regkey
}
}
在我看来,最简单的解决方案是为您的停止时间保留一个实例变量,并且您设置的每个组合框项都会设置此停止时间,timer\u tick事件只会检查它是否已超过该时间。组合框中的空白项可以清除变量
private DateTime timeToStop;
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
timeToStop = DateTime.Now.Add(DateTime.Parse(comboBox1.Text));
}
catch(Exception)
{
timeToStop = new DateTime(3000, 01, 01, 00, 00, 00);
}
}
public void disableButton_Click(object sender, EventArgs e)
{
_Timer.Stop();
_lastRun = DateTime.Now;
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (DateTime.Now >= timeToStop)
{
_Timer.Stop();
_lastRun = DateTime.Now;
// Disable regkey
}
}
我不确定你在哪方面需要帮助。您有几件事需要考虑:一个正在工作的regkey转换器、一个服务、一个UI更新和一个状态检查,您特别需要哪一部分的帮助?例如,如果组合框中选择的时间已过(16:00),则希望它继续并停止计时器。如果(strTime\u End
if(strTime\u End
。我有一个程序可以禁用锁屏并停止windows中的服务。我有两个按钮启用,禁用和一个组合框,有预设的时间。当我的程序运行且用户单击“启用”时,程序应禁用锁定屏幕,直到用户手动单击“禁用”。我试图做到的是,如果用户从未点击“禁用”,则程序不会整夜运行。因此,通过从组合框中选择一个预设时间,程序将自动禁用它。我重新编写了我试图执行的操作。我有一个程序可以禁用锁屏并停止windows中的服务。我有两个按钮启用,禁用和一个组合框,有预设的时间。当我的程序运行且用户单击“启用”时,程序应禁用锁定屏幕,直到用户手动单击“禁用”。我试图做到的是,如果用户从未点击“禁用”,则程序不会整夜运行。因此,通过从组合框中选择一个预设时间,程序将自动禁用它代码>开始工作。我不断收到错误2参数“1”:无法从“System.DateTime”转换为“System.TimeSpan”。不确定我错了什么。timeToStop=DateTime.Now.Add(TimeSpan.Parse(comboBox1.Text))代码>。在未来的项目中,在处理日期和时间时会遇到一些问题,我的建议是阅读MSDN DateTime&TimeSpan.ToString()和.Parse()方法,看看它们是如何工作的。选择一种在项目中易于理解的近似通用格式(存储和计算),然后担心用户本地时间区域性只是一个显示问题。并且强制执行严格的输入格式(您的或他们的,取决于您的经验),我似乎无法获得timeToStop=DateTime.Now.Add(DateTime.Parse(comboBox1.Text));
无法工作。我不断收到错误2参数“1”:无法从“System.DateTime”转换为“System.TimeSpan”。不确定我有什么错误。timeToStop=DateTime.Now.Add(TimeSpan.Parse(comboBox1.Text));
。在将来的项目中,使用日期和时间时会遇到一些问题,我的建议是阅读MSDN DateTime&TimeSpan.ToString()和.Parse()方法,看看它们是如何工作的。确定一种在项目中易于理解的近似通用格式(存储和计算),然后担心用户本地时间文化只是作为一个显示问题。并强制执行严格的输入格式(您的或他们的格式取决于您的前