用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包:

	<ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog" Version="4.0.0" /><PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" /><PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" /><PackageReference Include="Serilog.Sinks.File" Version="6.0.0" /></ItemGroup>

将app.xaml 的属性-生成操作改为"页"

在这里插入图片描述
此时弹出:

在这里插入图片描述

点击"取消"

点击显示所有文件, 将app.xaml包含在项目中

在这里插入图片描述

此时, 在csproj中,

  <ItemGroup><ApplicationDefinition Remove="App.xaml" /></ItemGroup><ItemGroup><Page Include="App.xaml" /></ItemGroup>

在app.xaml.cs中 写入

    public partial class App : Application{[STAThread]static  void Main(string[] args){var app = new App();app.InitializeComponent();app.Run();}}

点击运行, 此时项目已经可以运行起来了
在这里插入图片描述

在app.xaml中 删除

             StartupUri="MainWindow.xaml"

改为

<Application x:Class="HoistWpfTest.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:HoistWpfTest"><Application.Resources></Application.Resources>
</Application>
        [STAThread]static void Main(string[] args){using var host = CreateHostBuilder(args).Build();host.Start();var app = new App();app.InitializeComponent();app.MainWindow = host.Services.GetRequiredService<MainWindow>();//app.MainWindow.Show();app.MainWindow.Visibility = Visibility.Visible;app.Run();}private static IHostBuilder CreateHostBuilder(string[] args){return Host.CreateDefaultBuilder(args).ConfigureServices(services =>{services.AddSingleton<MainWindow>();});}

此时 已经用Host管理了wpf项目.

较为完整的配置:

using System.Windows;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Formatting.Json;
using WpfApp6.ViewModels;
using WpfApp6.Views;namespace WpfApp6
{/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : Application{[STAThread]static void Main(string[] args){using IHost? host = CreateHostBuilder(args).Build();host.Start();var app = new App();app.InitializeComponent();app.MainWindow = host.Services.GetRequiredService<MainView>();//app.MainWindow.Show();app.MainWindow.Visibility = Visibility.Visible;app.Run();}private static IHostBuilder CreateHostBuilder(string[] args){return Host.CreateDefaultBuilder(args).ConfigureServices(services =>{services.AddSingleton<MainViewModel>();services.AddSingleton(sp => new MainView{DataContext = sp.GetRequiredService<MainViewModel>()});services.AddSingleton<WeakReferenceMessenger>();services.AddSingleton<IMessenger, WeakReferenceMessenger>(sp =>sp.GetRequiredService<WeakReferenceMessenger>());services.AddSingleton(_ => Current.Dispatcher);services.AddHostedService<StartupInitializationService>();}).ConfigureLogging(logging =>{logging.ClearProviders();Log.Logger  = new LoggerConfiguration().MinimumLevel.Debug().Enrich.FromLogContext().WriteTo.Console(new JsonFormatter()).WriteTo.File("log.txt",rollingInterval:RollingInterval.Day).CreateLogger();logging.AddSerilog(Log.Logger);});}}
}
    public class StartupInitializationService : IHostedLifecycleService{private readonly ILogger<StartupInitializationService> logger;public StartupInitializationService(ILogger<StartupInitializationService> logger){this.logger = logger;}public Task StartAsync(CancellationToken cancellationToken){return Task.CompletedTask;}public Task StartedAsync(CancellationToken cancellationToken){Task.Run(async () =>{while (true){logger.LogWarning($"输出日志:{DateTime.Now}");await Task.Delay(1000);}});return Task.CompletedTask;}public Task StartingAsync(CancellationToken cancellationToken){return Task.CompletedTask;}public Task StopAsync(CancellationToken cancellationToken){return Task.CompletedTask;}public Task StoppedAsync(CancellationToken cancellationToken){return Task.CompletedTask;}public Task StoppingAsync(CancellationToken cancellationToken){return Task.CompletedTask;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一张顶20张H100,速度10倍于B200:史上最快AI芯片,华人制造

在谈到 AI、大模型、算力等关键词时&#xff0c;如果要提及硬件产品&#xff0c;很多人应该会不假思索的说出英伟达。的确&#xff0c;在全球都缺算力的环境下&#xff0c;英伟达的地位是独特又难以撼动的。然而就在近日&#xff0c;有一家公司带着自己的 AI 芯片来叫板了。昨天…

吴恩达机器学习 第三课 week1 无监督学习算法(下)

目录 01 学习目标 02 异常检测算法 2.1 异常检测算法的概念 2.2 基于高斯模型的异常检测 03 利用异常检测算法检测网络服务器的故障 3.1 问题描述 3.2 算法实现 3.3 问题升级 04 总结 01 学习目标 &#xff08;1&#xff09;理解异常检测算法&#xff08;Anomaly Det…

Android Settings值和SystemProperties值的使用

android源码开发中 常常要用到一些全局标志或者说变量 这时候我们可以给android系统添加自己想要的属性 Settings的使用方法 导入import android.provider.Settings; Settings.Global 写入值方法&#xff1a; Settings.Global.putString(getContentResolver(),"sys.s…

服务器上并行提交任务

实用场景 1你的任务是相互独立的 2你本来使用的是for循环&#xff0c;你想提高时间想要把全部这些独立的文件&#xff0c;一起提交一起跑 3你的任务数量很多并且任务同时用一个脚本&#xff0c;只是不同任务的参数不易呀&#xff0c;本质上你一个个提交也可以&#xff0c;但是…

lvgl v8.3 windows仿真

1&#xff0c;下载安装codeblocks20.03 https://zenlayer.dl.sourceforge.net/project/codeblocks/Binaries/20.03/Windows/codeblocks-20.03mingw-setup.exe?viasf1 2&#xff0c;下载代码 git clone --recurse-submodules https://github.com/lvgl/lv_port_win_codeblock…

双指针算法——滑动窗口

前言&#xff1a; 滑动窗口本质上也是利用双指针来解决特定情况下的问题。滑动窗口算法思想是通过俩个指针&#xff0c;定义在左边和右边&#xff0c;俩指针同向运动&#xff0c;保持着一个像“窗口”一样的双指针来不停的压缩或者扩展来移动“窗口”&#xff0c;从而找到特定…

DigitalOcean Droplet 云主机新增内置第五代 Xeon CPU 机型

DigitalOcean 近期宣布&#xff0c;在其高级 CPU 服务器&#xff08;Premium CPU-Optimized Droplet&#xff09;队列中引入英特尔第五代Xeon可扩展处理器&#xff08;代号为 Emerald Rapids&#xff09;。作为英特尔产品线中的最新一代用于数据中心工作负载的处理器&#xff0…

深入探索PostgreSQL的复制功能:原理、配置与实践

PostgreSQL是一个高度可扩展的开源对象关系数据库系统&#xff0c;它提供了强大的数据复制功能&#xff0c;以确保数据的高可用性和容错性。PostgreSQL的复制功能允许多个数据库服务器之间同步数据&#xff0c;从而支持读写分离、负载均衡和备份等多种应用场景。本文将详细介绍…

Java接口、抽象类、继承运用练习

按以下要求编写一个完整的 Java 程序&#xff1a; &#xff08;1&#xff09;编写抽象类 GeometricObject 类&#xff1b; • 该类包括 String型的变量 color 和 boolean 型的 filled 变量&#xff1b; •该类有一个默认的构造方法&#xff1b; •两个抽象方法&#xff0c;计算…

【C/C++】静态函数调用类中成员函数方法 -- 最快捷之一

背景 注册回调函数中&#xff0c;回调函数是一个静态函数。需要调用类对象中的一个成员函数进行后续通知逻辑。 方案 定义全局指针&#xff0c;用于指向类对象this指针 static void *s_this_obj;类构造函数中&#xff0c;将全局指针指向所需类的this指针 s_this_obj this…

golang string、byte[]以及rune的基本概念,用法以及区别

在 Go 语言中&#xff0c;string、byte[] 和 rune 是处理文本和字符的三种不同数据类型。它们有各自的用途和特点&#xff0c;下面将详细介绍它们的基本概念、用法以及区别。 1. string 基本概念 字符串类型&#xff1a;string 是 Go 语言中的一种基本类型&#xff0c;用于表…

LangCell:用于细胞注释的语言-细胞预训练模型

细胞身份包括细胞的各种语义&#xff0c;包括细胞类型、pathway信息、疾病信息等。从转录组数据中了解细胞身份&#xff0c;例如注释细胞类型&#xff0c;是一项基础任务。由于语义是由人类赋予的&#xff0c;如果没有cell-label pair提供监督信号&#xff0c;AI模型很难有效地…

小项目——MySQL集训(学生成绩录入)

ddl语句 -- 创建学生信息表 CREATE TABLE students (student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 学生ID,name VARCHAR(50) NOT NULL COMMENT 学生姓名,gender ENUM(男, 女) NOT NULL COMMENT 性别,class VARCHAR(50) NOT NULL COMMENT 班级,registration_date DATE CO…

【杂记-浅谈EBGP外部边界网关协议、IBGP内部边界网关协议】

一、EBGP概述 EBGP&#xff0c;External Border Gateway Protocol&#xff0c;即外部边界网关协议&#xff0c;EBGP主要用于在不同自治系统&#xff08;AS&#xff09;之间交换路由信息&#xff0c;每个AS都有一个独特的AS号码&#xff0c;用于区分不同的自治系统。EBGP通过AS…

Redis实战—基于setnx的分布式锁与Redisson

本博客为个人学习笔记&#xff0c;学习网站与详细见&#xff1a;黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于SETNX的分布式锁 SETNX锁代码实现 修改业务代码 SETNX锁误删问题 SETNX锁原子性问题 Lua脚本 编写脚本 代码优化 总结 Redisson 前言…

C++泛型编程之模板的使用

文章目录 1.模板的概念1.函数模板2.类模板3.模板特化4.模板元编程 2.模板的使用1.函数模板的使用2.类模板的使用3.模板特化4.模板参数推导5.普通函数和函数模板的调用规则1. 非模板函数优先2. 最佳匹配原则3. 显式模板参数指定4. 函数模板特化5. 重载决议示例 7.注意事项8.类模…

v-for中为什么要使用key

在Vue中&#xff0c;v-for指令用于循环遍历数组或对象&#xff0c;并为每个元素或属性生成相应的DOM元素或组件实例。当使用v-for循环渲染时&#xff0c;Vue会尽量复用已有的元素&#xff0c;而不是重新创建。为了实现这个复用机制&#xff0c;Vue会根据每个元素的key来跟踪它们…

基于STM32的温湿度检测TFT屏幕proteus恒温控制仿真系统

一、引言 本文介绍了一个基于STM32的恒温控制箱检测系统&#xff0c;该系统通过DHT11温湿度传感器采集环境中的温湿度数据&#xff0c;并利用TFT LCD屏幕进行实时显示。通过按键切换页面显示&#xff0c;通过按键切换实现恒温控制箱的恒温控制。为了验证系统的可靠性和稳定性&…

MongoDB的核心点是什么,选择是否使用!

MongoDB概述 定义: MongoDB是一个文档数据库&#xff0c;设计目的在于简化应用程序的开发和扩展。起源: 由DoubleClick创始人Dwight Merriman和Kevin O’Connor于2007年启动&#xff0c;以应对大规模流量需求。 MongoDB发展历程 开发背景: 由于关系型数据库无法满足DoubleCl…

在 TS 中使用 Manifold 建模

一 Manifold 是什么 1.1 简介 Manifold 是一个几何处理库&#xff0c;专注于高效、可靠的布尔运算和几何操作。它主要用于3D建模和计算几何领域&#xff0c;提供了高性能的几何算法&#xff0c;适用于需要精确几何计算的应用场景。 1.2 主要特点 高效的布尔运算&#xff1a…