首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DispatcherTimer有问题

DispatcherTimer有问题
EN

Stack Overflow用户
提问于 2014-03-26 11:03:15
回答 2查看 620关注 0票数 0

我在WPF窗口上使用一些调度器计时器时遇到了一些问题。在窗口上,我通常使用计时器,但是这个函数似乎不在WPF表单上,所以我被告知DispatcherTimer是等价的。

我有三个这样的计时器:

第一个每30秒就会将表单向前推进--这个操作是正确的。

代码语言:javascript
复制
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被打开或关闭,我能做什么让计时器不断地运行和更新表单?

代码语言:javascript
复制
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进程,但同样地,就像第二个定时器似乎没有持续运行一样。

有什么想法吗?

代码语言:javascript
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-26 11:48:51

如果IE正在运行,它将禁用该按钮并显示消息,但是关闭IE后,它不会更改它。之所以发生这种情况,是因为您没有在计时器滴答事件中获得进程。因此,更改代码如下所示。

代码语言:javascript
复制
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;
    }
}
票数 4
EN

Stack Overflow用户

发布于 2014-03-26 11:19:11

在代码片段中,您只获得一次进程列表,然后每次检查相同的数组。如果在实际代码中是相同的,请确保使用每个滴答更新流程列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22658971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档