83597


以下のようなシンプルなコードを動かした場合、Labelの値がリアルタイムに更新されません。正確にはウィンドウを動かすと値が更新され、何も触らないでいると更新されません。描画更新が止まっているような、そんな感じがあります。また、async/await
をやめると1秒は待ってくれませんが値の更新は高速に行われます。

バックグラウンドで値を1秒ごとに更新するようなWPFアプリは作成できないのでしょうか？

[code]

    // MainWindow.xaml
    /*
    <Window x:Class="WpfApp32.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp32"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <DockPanel>
            <Label DockPanel.Dock="Top" Content="{Binding Value}" Height="40" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
        </DockPanel>
    </Window>
    */
    
    // MainWindow.xaml.cs
    
    using System;
    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace WpfApp32
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                this.DataContext = new MainWindowVM();
            }
        }
    
        public class MainWindowVM : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
    
            public int Value { get; set; } = 0;
    
            public MainWindowVM()
            {
                Task.Run(async () => {
                    while (true)
                    {
                        Value++;
                        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Value"));
                        await Task.Delay(1000);
                    }
                });
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2021-11-11T15:32:38.593
83571
2021-11-13T04:15:44.407
18863
question
c#
Task.Delay使用時、WPFでプロパティの値がリアルタイムに更新されない


この現象はデバッグ実行しているときのみ発生し、ホットリロードが設定されていることが原因でした。Visual Studio の [ツール(T)] →
[オプション(O)] からオプションを開き、[デバッグ] → [XAMLホットリロード] の設定項目の [XAML ホットリロードを有効にする]
をオフにすることで今回の問題は解決しました。


CC BY-SA 4.0
2021-11-13T04:15:44.407
83597
2021-11-13T04:15:44.407
18863
83571
answer