Dispatcher.Invoke有时不会被调用

时间:2016-08-10 11:29:26

标签: c# multithreading visual-studio-2013 static-methods notifyicon

我的应用需要不时显示气球通知。我通过执行创建Dispatcher.Invoke()的{​​{1}}的{​​{1}}执行此操作,显示气球通知,然后处理系统任务栏图标。

Action

但是,有时候NotifyIcon没有运行。记录在它之前停止,public abstract class Foo { void Bar() { MainWindow.ShowTrayNotification(ToolTipIcon.Info, "Hello There!", "Balloon text here."); } } public partial class MainWindow : Window { static Dispatcher dispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher; public static void ShowTrayNotification(ToolTipIcon icon, string title, string text) { dispatcher.Invoke(new Action(() => { //anything here is not run UIHelper.ShowTrayNotification(icon, title, text); //static method })); //anything here is also not called if dispatcher.Invoke() is not run } } 的{​​{1}}内没有记录。

奇怪的是,当我触发PC关闭时,突然Dispatcher.Invoke被触发(显示通知)并正常进行(我的预关闭回调被执行)。

我尝试做Debug> Windows>线程,但问题不会发生在调试模式下,所以我找不到导致UI线程阻塞的原因。

造成这种情况的原因是什么?如何解决?

更新

我尝试了以下操作但它们无效:

  • 我将其更改为Invoke

  • 我添加了Action

更新2

Invoke

1 个答案:

答案 0 :(得分:0)

试试这样:

<?php get_header(); ?>
  <section id="content" role="main" class="ip-main">
      <?php if(have_posts()) : while(have_posts()) : the_post(); ?>
      <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

       <?php
       /* BEGIN IMAGEPRESS CODE */
       /* main image display (required) */
            if(function_exists('ip_main'))
                ip_main(get_the_ID());

       /* related images (optional, can be placed in the sidebar) */
            if(function_exists('ip_related'))
                ip_related(get_the_ID());
            /* END IMAGEPRESS CODE */
            ?>
        </article>


        <?php comments_template('', true); ?>
    <?php endwhile; endif; ?>
</section>

<?php get_footer(); ?>

另见Dispatcher.CurrentDispatcher vs. Application.Current.Dispatcher