C# WINDOWS MAUI專案 建立背景常駐執行序並且可以更新UI

C# WINDOWS MAUI專案 建立背景常駐執行序並且可以更新UI

C# WINDOWS MAUI專案 建立背景常駐執行序並且可以更新UI


資料來源:chatGPT(c# maui thread ui example)


GITHUB: https://github.com/jash-git/MAUI_WinAPI_Object_test/tree/main/Code/03


Code:

    public IDispatcherTimer timmer { get; set; }
    public Thread thread;
    public bool blnStop = false;
    public MainPage()
	{
		InitializeComponent();

        /*
        //---
        //Timer Mode
        //https://learn.microsoft.com/en-us/answers/questions/1207012/how-to-stop-device-starttimer
        timmer = Application.Current.Dispatcher.CreateTimer();
        timmer.Interval = new TimeSpan(0, 0, 0, 0, 100);//天/時/分/秒/毫秒
        timmer.Tick += Timmer_Tick;
        timmer.IsRepeating = true;//the timer will keep recurring, you can set false
        timmer.Start();
        //---Timer Mode
        //*/
        // 在新執行緒中執行工作

        thread = new Thread(ThreadFun);
        thread.Start();
    }
    private void Timmer_Tick(object sender, EventArgs e)
    {
        labtime.Text = DateTime.Now.ToString("HH:mm:ss");
    }
    private void ThreadFun()
    {
        // 模擬一些耗時的工作
        do
        {
            // 更新使用者介面 (UI) 元素
            Device.BeginInvokeOnMainThread(() =>
            {
                // 在這裡更新 UI 控制項
                labtime.Text = DateTime.Now.ToString("HH:mm:ss");
            });
            Thread.Sleep(1000);
        } while (!blnStop);

    }


chatGPTCode:

using System;
using System.Threading;
using Microsoft.Maui.Controls;

namespace MauiThreadUIExample
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void StartThreadButton_Clicked(object sender, EventArgs e)
        {
            // 在新執行緒中執行工作
            Thread thread = new Thread(UpdateUI);
            thread.Start();
        }

        private void UpdateUI()
        {
            // 模擬一些耗時的工作
            Thread.Sleep(3000);

            // 更新使用者介面 (UI) 元素
            Device.BeginInvokeOnMainThread(() =>
            {
                // 在這裡更新 UI 控制項
                StatusLabel.Text = "工作完成!";
            });
        }
    }
}

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *