我在WPF窗口上使用一些调度器计时器时遇到了一些问题。在窗口上,我通常使用计时器,但是这个函数似乎不在WPF表单上,所以我被告知DispatcherTimer是等价的。
我有三个这样的计时器:
第一个每30秒就会将表单向前推进--这个操作是正确的。
dispatcherTimer1.Tick += new EventHandler(dispatcherTimer1_Tick);
dispatcherTimer1.Interval = TimeSpan.FromSeconds(30);
dispatcherTimer1.Start();
private void dispatcherTimer1_Tick(object sender, EventArgs e)
{
this.Topmost.Equals(true);
this.Activate();
this.BringIntoView();
this.Focus();
this.Topmost.Equals(false);
}第二次检查每100毫秒检查一次,查看IExplorer是否正在运行,如果是,则隐藏OK按钮,并在窗体上显示一条消息,通知用户关闭IExplorer --运行表单时,如果运行IE,将禁用该按钮并显示消息,但在关闭IE后,它不会将其更改回。
如果IE被打开或关闭,我能做什么让计时器不断地运行和更新表单?
public Process[] aProc = Process.GetProcessesByName("IExplore");
dispatcherTimer2.Tick += new EventHandler(dispatcherTimer2_Tick);
dispatcherTimer2.Interval = TimeSpan.FromMilliseconds(100);
dispatcherTimer2.Start();
private void dispatcherTimer2_Tick(object sender, EventArgs e)
{
if (aProc.Length == 0)
{
richTextBox3.Visibility = System.Windows.Visibility.Hidden;
button1.Visibility = System.Windows.Visibility.Visible;
}
else
{
button1.Visibility = System.Windows.Visibility.Hidden;
richTextBox3.Visibility = System.Windows.Visibility.Visible;
}
}第三,就像第二个计时器每100毫秒运行一次一样,一旦他们单击OK按钮,我想在用户试图调用它的情况下终止IExplorer进程,但同样地,就像第二个定时器似乎没有持续运行一样。
有什么想法吗?
dispatcherTimer3.Tick += new EventHandler(dispatcherTimer3_Tick);
dispatcherTimer3.Interval = TimeSpan.FromMilliseconds(100);
dispatcherTimer3.Start();
private void dispatcherTimer3_Tick(object sender, EventArgs e)
{
Process[] Processes = Process.GetProcessesByName("IExplore");
foreach (Process Proc1 in Processes)
{
Proc1.Kill();
}
}发布于 2014-03-26 11:48:51
如果IE正在运行,它将禁用该按钮并显示消息,但是关闭IE后,它不会更改它。之所以发生这种情况,是因为您没有在计时器滴答事件中获得进程。因此,更改代码如下所示。
dispatcherTimer2.Tick += new EventHandler(dispatcherTimer2_Tick);
dispatcherTimer2.Interval = TimeSpan.FromMilliseconds(100);
dispatcherTimer2.Start();
private void dispatcherTimer2_Tick(object sender, EventArgs e)
{
Process[] aProc = Process.GetProcessesByName("IExplore");
if (aProc.Length == 0)
{
richTextBox3.Visibility = System.Windows.Visibility.Hidden;
button1.Visibility = System.Windows.Visibility.Visible;
}
else
{
button1.Visibility = System.Windows.Visibility.Hidden;
richTextBox3.Visibility = System.Windows.Visibility.Visible;
}
}发布于 2014-03-26 11:19:11
在代码片段中,您只获得一次进程列表,然后每次检查相同的数组。如果在实际代码中是相同的,请确保使用每个滴答更新流程列表。
https://stackoverflow.com/questions/22658971
复制相似问题