Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Timer WPF

12:05 01-10-2021 195 lượt xem 2 bình luận

Dạ e chào mọi người ạ 

Hiện e mới học WPF, e đang rối  phần về timer ạ. Hiện timer của e nó nhảy không chuẩn ạ. Chỉ khi e nhấn chuột vào thanh controlbar thì lúc đó mới mới chạy chuẩn theo cài đặt ạ. Có khi e đang chạy timer bị đơ không chay nữa, phải dùng chuột nhấp vào thanh controlbar mới chạy lại ạ 

Dạ đây là video đề mô ạ 

https://www.youtube.com/watch?v=yZdmHq35B-U

Code MainViewModel ạ 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Threading;

namespace QuanLyKho.ViewModel
{
    public class MainViewModel : BaseViewModel
    {
        private string _lbl;
        public string lbl { get => _lbl; set { _lbl = value; OnPropertyChanged(); } }
        public void Timer()
        {
            DispatcherTimer timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += timer_Tick;
            timer.Start();
        }
        public void timer_Tick(object sender, EventArgs e)
        {
            lbl = DateTime.Now.ToLongTimeString();


        }




        public bool Isloaded = false;
        public ICommand LoadedWindowCommand { get; set; }

        // mọi thứ xử lý sẽ nằm trong này
        public MainViewModel()
        {
          
            Timer();
        }
    }
}

Code phần View ạ 

<Window x:Class="QuanLyKho.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:QuanLyKho"
        WindowStartupLocation="CenterScreen"
        mc:Ignorable="d"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        
        Name="mainWindow"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
         xmlns:uc="clr-namespace:QuanLyKho.UserControlThuThiem"
        TextElement.Foreground="{DynamicResource MaterialDesignBody}"
        ResizeMode="NoResize"
        WindowStyle="None"
     TextElement.FontWeight="Regular"
     TextElement.FontSize="13"
     TextOptions.TextFormattingMode="Ideal"
     TextOptions.TextRenderingMode="Auto"
     Background="{DynamicResource MaterialDesignPaper}"
     FontFamily="{DynamicResource MaterialDesignFont}"
        DataContext="{StaticResource MainVM}"
        Title="Timer" FontSize="15" 
        Height="600" Width="650">

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Loaded">
            <i:InvokeCommandAction Command="{Binding LoadedWindowCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

    <Grid>

        <Grid.RowDefinitions>
            <RowDefinition Height="auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <uc:ControlBarUC Tag="{Binding Title, ElementName=mainWindow}"></uc:ControlBarUC>
        </Grid>

        <Grid Grid.Row="1">
            <Grid.RowDefinitions>
           <RowDefinition Height="auto"></RowDefinition>
            </Grid.RowDefinitions>

        </Grid>
   
            <!--Timer-->
            <Grid Grid.Row="1">

            <TextBlock x:Name="lblTime" 
                        TextWrapping="Wrap" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center"
                        Text="{Binding lbl, UpdateSourceTrigger=PropertyChanged}">

            </TextBlock>
        </Grid>


    </Grid>
</Window>

Dạ mong a/c giúp đỡ e phần này với ạ 

E cảm ơn a/c nhiều lắm ạ

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Supporter Moderator đã bình luận 12:14 01-10-2021

Đối với trường hợp mình đề nghị dùng Thread nhé lớp DispatcherTimer do MS định nghĩa nên đôi khi mình không Control được nó, tốt nhất mình nên dùngThread riêng để dễ kiểm soát hơn.

Câu hỏi mới nhất