我在WPF窗口上使用一些Dispatcher Timers时遇到一些问题。
在一个窗口我通常会使用一个计时器,但是这个函数似乎不会出现在WPF表单上,所以我被告知DispatcherTimer
是等价的。
所以我有3个这样的计时器:
第一个每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();
}
}
答案 0 :(得分:4)
如果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;
}
}
答案 1 :(得分:0)
在代码段中,您只获取一次进程列表,然后每次都检查相同的数组。如果在实际代码中它是相同的,请确保每次勾选都更新进程列表。