LoginSignup
2

More than 1 year has passed since last update.

posted at

updated at

[Windows/WPF] バックグラウンドプロセスを作ってみる(.NET5版)

もくじ

やりたいこと

以前.Net Framework4.7.2で、バックグラウンドのプロセスを作成した。
それを.NET5で作ろうとしたら、そのままのやり方ではうまくいかなかったので、.NET5でのやり方をメモ。

手順

  1. 「WPFアプリケーション」を選択する。
    image.png

  2. ターゲットフレームワークで「.NET5.0」を選択する。
    image.png

  3. プロジェクトのcsprojファイルをエディタで開いて、<PropertyGroup>の中に、
    <EnableDefaultApplicationDefinition>false</EnableDefaultApplicationDefinition>を記入する。
    image.png

  4. WindowlessAppプロジェクトのApp.xamlのビルドアクションをPageにする
    image.png

  5. App.xamlの先頭のにあるStartupUri="MainWindow.xaml"を削除
    image.png

  6. App.xaml.cs に '[STAThread]' をつけてMainメソッドを作る

App.xaml.cs
using System;
using System.Windows;

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

これで、裏で動く.NET5版プログラム完成。
ただ、このままだと終わらないプログラムになるので、終わらせる処理のテンプレとして、下記に「起動してから10秒後に終わるバックグラウンドプロセス」のひな型を置いておく。

起動10秒で終了するApp.xaml.cs
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;

namespace WpfApp9
{
    public partial class App : Application
    {
        [STAThread]
        public static void Main()
        {
            App app = new App();
            app.InitializeComponent();

            Task.Run(() =>
            {
                Thread.Sleep(10000);
                App.Current.Dispatcher.Invoke(() =>
                {
                    Application.Current.Shutdown();// ★これでアプリ終了する
                });
            });

            app.Run();
        }
    }
}

注意

csprojへの追記をする前にビルドアクションを変えてしまうと、このようなエラーがでる。
(これが、.NetFW4.8でやったやり方そのままを.NET5でやったときに詰まったところ。)
image.png
必ずcsprojを変更してからビルドアクションを変えること。

参考

こちらの記事を参考にさせて頂きました。ありがとうございます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2