macOS .NET MAUI タイマーを使った時計表示

MAUIアプリ タイマーで時計表示

Visual Studio 17.3 Preview版 MAUIプロジェクトで Timerを使い XAMLのLabelに時計を表示する。

Visual Studio for 2022 Macは、下↓のURLからダウンロードできます。

https://visualstudio.microsoft.com/ja/vs/mac/

Preview版は、 現時点バージョン17.3で MAUIアプリの プロジェクトが作成できます。

新規プロジェクト作成 .NET MAUI アプリ
新規プロジェクト作成 .NET MAUI アプリ

メインの XAML画面で「タイマーを使った時計表示」

MAUIアプリプロジェクトを作成すると、デフォルトで下のアプリが実装されています。

初期実装されているアプリ

この画面の「Hello, World!」Label部分を時計表示に変えるコードです。

上記の画面は「MainPage.xaml」です。

下記は、「MainPage.xaml.cs」です。

コンストラクタにタイマーとイベントを追加しています。

public partial class MainPage : ContentPage
{
	int count = 0;

	public MainPage()
	{
		InitializeComponent();
        new Timer((state) =>
        {
            try
            {
                Dispatcher.Dispatch(() =>
                {
                    try
                    {
                        Label1.Text = DateTime.Now.ToString();
                        SemanticScreenReader.Announce(Label1.Text);//これいらん?
                    }
                    catch (Exception _e)
                    {
                        Console.WriteLine(_e.Message);
                    }
                });
            }
            catch (Exception _e1)
            {
                Console.WriteLine(_e1.Message);
            }
        }, null, new TimeSpan(0), new TimeSpan(0, 0, 1));
    }
}

TimerSystem.Threading.Timerです。

この、Timerイベントから 直接 Label1.Textの値を 変更すると ぶつかります。

イベント内の、Dispatcher.Dispatch()の 中で Label1.Textの値を変更しています。

C# dotnet 6.0 変数の型でswitchしたい場合

C# dotnet 6.0 変数の型でswitchしたい場合

C# dotnet 6.0 変数の型(type)で switchしたい場合のコード例です。

下記 2つの クラスをswitchで判断したい とします。

class A {}
class B {}

List<object>に 上記2つのA, Bクラス インスタンスを入れます。

var objList = new List<object> {
    new A(), new B()
};

1つのswitchで、型が2つ型変数の入ったリスト内の型を判断する

foreach(var obj in objList)
{
    switch (obj){
        case A aValue:
            Console.WriteLine("This type is {0}.",aValue.GetType().ToString());
            break;
        case B bValue:
            Console.WriteLine("This type is {0}.",bValue.GetType().ToString());
            break;
    }
}
C# それぞれの型でswitchできています
結果 型でswitchできています

上記の場合、 変数が switch(値)ですが switch(type) の コード例です。

var objList = new List<Type> {
    (new A()).GetType(), (new B()).GetType()
};
foreach(var obj in objList)
{
    switch (obj){
        case Type aValue when aValue == typeof(A):
            Console.WriteLine("This type is {0}.",aValue.ToString());
            break;
        case Type bValue when bValue == typeof(B):
            Console.WriteLine("This type is {0}.",bValue.ToString());
            break;
    }
}

2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED