代码之家  ›  专栏  ›  技术社区  ›  Thomas daign

application.current.shutdown()没有

  •  6
  • Thomas daign  · 技术社区  · 15 年前

    标题是关于它的。WPF应用程序,包含一些用于IPC的WCF内容。我打电话 Application.Current.Shutdown() 应用程序继续愉快地运行。我想 Shutdown 本来是势不可挡的。

    可能是因为它是从后台线程调用的?我需要做一些调度员的工作吗?

    3 回复  |  直到 10 年前
        1
  •  12
  •   dhh    10 年前

    我打电话给你的时候你有个例外 Application.Current.Shutdown 在除主线程以外的任何线程中,所以我假设您已经在哪里正确地使用了“调度器的拨弄”。

    在任何情况下,这都会编译并退出应用程序,因此如果Dispatcher位看起来不像您所拥有的,则可以将其放入:

    ThreadStart ts = delegate()
        {
            Dispatcher.BeginInvoke((Action)delegate()
            {
                Application.Current.Shutdown();
            });
         };
     Thread t = new Thread(ts);
     t.Start();
    
        2
  •  10
  •   Gabe    15 年前

    根据我的经验,为了关闭应用程序,所有线程都必须显式终止或标记为后台线程。

    下面是在后台启动读取线程的示例:

    _readThread = new Thread(new ThreadStart(ReadThread));
    _readThread.Name = "Receiver";
    _readThread.Priority = ThreadPriority.Highest;
    _readThread.IsBackground = true;
    _readThread.Start();
    

    这个 IsBackground 属性是键。如果不进行设置,则在调用shutdown时线程不会在上终止。

        3
  •  1
  •   dhh    10 年前

    我只经历过 Application.Current.Shutdown 从Visual Studio运行时不工作。在Visual Studio中(至少是我使用的2010版本) 应用程序.电流.关闭 什么都不做。如果我单步通过它,执行这一行,然后继续。如果我从Windows资源管理器运行程序(作为.exe),则 应用程序.电流.关闭 工作良好。

    可能有一种解释,因为在调试期间其他线程是活动的,但我无法解释。

    推荐文章