首页 > 解决方案 > 如何在 Windows 服务中创建 WPF 调度程序

问题描述

我们有一个 windows 服务,windows 服务的一部分工作就是发送电子邮件。我们的应用程序允许用户将过滤保存在网格(第三方)上并为其命名。然后可以在创建网格的任务中使用视图名称,加载数据视图的过滤,然后从网格中获取字符串过滤器表达式。然后将字符串过滤器表达式馈送到DynamicLinq并在 Linq“Where”语句中使用以获取用户将看到的数据。这种方法的问题是需要 WPF 来允许代码创建网格、过滤和发送电子邮件。

使用此参考,我们尝试运行任务。它可以在常规的 WPF 应用程序中运行,但不能在我们的 Windows 服务中运行。这是我们的任务代码(代码 1):

public class OurTask
{
    public void RunTask ()
    {
        // Do some setup

       Action createGridAction =
                ( Action )
                (
                    () =>
                    {
                         // create grid, load view, get filter expression
                         // get filtered data
                    }
                );

            // create a thread
            var newWindowThread = new Thread ( new ThreadStart ( () =>
            {
                // create our context, and install it:
                SynchronizationContext.SetSynchronizationContext (
                    new DispatcherSynchronizationContext (
                        Dispatcher.CurrentDispatcher ) );

                LogProvider.Logger.LogInfo ( "RunTask Call CreateGrid" );

                createGridAction ();

                LogProvider.Logger.LogInfo ( "RunTask Called CreateGrid" );
            } ) );

            // use data to create email with data view and send email

    }

}

我们在很多地方也有这样的代码(代码 2):

       Action notifyAction =
                ( Action )
                (
                    () =>
                    {
                       // do something
                    }
                );  

            if ( System.Windows.Application.Current != null && 
                 System.Windows.Application.Current.Dispatcher.Thread != Thread.CurrentThread )
                System.Windows.Application.Current.Dispatcher.Invoke ( notifyAction, 
                    System.Windows.Threading.DispatcherPriority.DataBind );
            else
               notifyAction ();

我们想要设置一个将运行代码 1 的调度程序,但我们还想
设置应用程序调度程序以便代码 2 可以工作。我们如何才能至少让 Code 1 运行并理想地设置 App Dispatcher 以便 Code 2 运行?

更新 接受了@BionicCode 建议并创建了一个没有 UI 并处理网格代码的服务器客户端。谢谢

标签: wpfservice.net-5

解决方案


推荐阅读