wpf - 如何在 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 并处理网格代码的服务器客户端。谢谢
解决方案
推荐阅读
- python - 带有下划线迭代器的 for 循环的性能
- java - 将原始图像字符串数据转换为图像
- windows - 跨 RDP 自动提取 Windows 事件日志
- reactjs - Wordpress 自定义 Gutenberg 块无法正确重新加载
- android - 将 SDK 版本 26 更改为 28 时如何修复 Gradle 错误
- c# - How to replace string's words first and last characters
- powershell - 如何使用 Powershell 限制复制文件?
- javascript - 如何从 Google Maps Searchbox 中获取价值并推送到新的 div 标签?
- c - C中的多级管道
- javascript - 如何呈现 HTMLCollection 项目?