【问题标题】:Hosting / embed a Windows service to a WPF C#将 Windows 服务托管/嵌入到 WPF C#
【发布时间】:2013-11-16 03:44:44
【问题描述】:

我是 C# 新手。我以前做过Android编程。

我只需要用一个控制面板编写一个程序,并且程序在后台每 30 秒写入一个数据库。 UI 通过每秒从数据库中读取来更新。

我打算使用 Windows 服务来进行数据库的后台更新,以及多个异步线程。

问题: 1)由于异步线程仅在后台运行,是否也需要在其上使用服务?避免在 UI 线程中启动这些异步线程更好吗?

2) 在 Android 编程中,我可以简单地在项目中创建一个新的服务/异步线程类,然后从那里开始服务/线程编程。在 C# 中(我在 Visual Studio 2010 上,使用 WPF 作为控制面板),似乎我需要启动一个新的窗口服务项目,从那里编写代码,然后将其导入 WPF 项目?这是真的吗?

3) MainWindow.xaml.cs 是主/ UI 线程吗?

谢谢!!

【问题讨论】:

    标签: c# wpf asynchronous windows-services


    【解决方案1】:

    服务和线程是 .net 中的两个不同概念,线程是在同一进程的上下文中调度的轻量级对象,服务具有定义的接口,通常在不同进程的上下文中运行。

    为了保持 ui 响应,通常的做法是创建另一个线程来执行长时间运行的操作,请注意,如果后台线程需要与 ui 通信,则需要在与 ui 元素交互之前切换到 ui 线程。

    因此,您的数据库更新代码可以作为任务在您的 ui 应用程序中的另一个线程上运行,或者通过 WCF 运行到负责所有数据库活动的 Windows 服务。

    最后,wpf 应用程序和 windows 服务可以是同一个解决方案的一部分,但两者都会生成可执行文件,并且 windows 服务必须与服务安装程序一起安装。您仍然需要使用 WCF 在 ui 和 windows 服务之间进行通信。

    除非需要,我会考虑在单独的线程 Task 中执行数据库 io 并避免使用 windows 服务,除非在 UI 不存在时 io 将继续。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2012-04-07
      • 1970-01-01
      • 2019-05-08
      相关资源
      最近更新 更多