61.异步编程1 C#例子 WPF例子

news/2025/2/2 15:07:03/

和普通的任务绑定不太相同的部分如下:

 public MainWindowViewModel(){FetchUserInfoCommand = new RelayCommand(async (param) => await FetchUserInfoAsync());}private async Task FetchUserInfoAsync(){// 模拟异步操作,比如网络请求await Task.Delay(2000); // 模拟网络延迟UserInfo = "用户信息:新员工,需要学会WPF的异步,并巩固之前的知识。";}
        public MainWindowViewModel(){FetchUserInfoCommand = new RelayCommand(param => FetchUserInfoAsync());}//private async Task FetchUserInfoAsync()private void FetchUserInfoAsync(){Thread.Sleep(1000);UserInfo = "用户信息:新员工,需要学会WPF的异步,并巩固之前的知识。";}

前者是异步,后者则是普通的绑定任务。在前台实现的功能完全相同。但是后者却会导致前台卡死。

后台代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data.Common;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using static System.Runtime.InteropServices.JavaScript.JSType;namespace 异步
{public class MainWindowViewModel : INotifyPropertyChanged{private string _userInfo;public string UserInfo{get { return _userInfo; }set{_userInfo = value;OnPropertyChanged(nameof(UserInfo));}}public ICommand FetchUserInfoCommand { get; }//public MainWindowViewModel()//{//    //FetchUserInfoCommand = new RelayCommand(async (param) => await FetchUserInfoAsync());//    FetchUserInfoCommand = new RelayCommand(param => FetchUserInfoAsync());//}private async Task FetchUserInfoAsync()//private void FetchUserInfoAsync()//{//    // 模拟异步操作,比如网络请求//    //await Task.Delay(2000); // 模拟网络延迟//    Thread.Sleep(1000);//    UserInfo = "用户信息:新员工,需要学会WPF的异步,并巩固之前的知识。";//}public MainWindowViewModel(){FetchUserInfoCommand = new RelayCommand(async (param) => await FetchUserInfoAsync());}private async Task FetchUserInfoAsync(){// 模拟异步操作,比如网络请求await Task.Delay(2000); // 模拟网络延迟UserInfo = "用户信息:新员工,需要学会WPF的异步,并巩固之前的知识。";}//固定public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged([CallerMemberName] string propertyName = null){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}public class RelayCommand : ICommand{private readonly Action<object> _execute;public event EventHandler CanExecuteChanged;public RelayCommand(Action<object> execute) => _execute = execute;public bool CanExecute(object parameter) => true; // 总是可执行(简化)public void Execute(object parameter) => _execute(parameter);}
}
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace 异步
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();DataContext=new MainWindowViewModel();}}
}

前台:

<Window x:Class="异步.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:异步"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><StackPanel><Button Content="获取用户信息" Command="{Binding FetchUserInfoCommand}" Margin="10"/><TextBox Text="{Binding UserInfo, UpdateSourceTrigger=PropertyChanged}" Margin="10,20,10,10" TextWrapping="Wrap" Height="100"/></StackPanel></Grid>
</Window>


http://www.ppmy.cn/news/1568727.html

相关文章

无线通信与人工智能技术与发展年度总结

2024年&#xff0c;无线通信与人工智能技术取得了显著的进步和突破&#xff0c;这些技术的革新不仅推动了行业的数字化转型&#xff0c;还为全球经济的持续发展注入了新的活力。以下是对无线通信与人工智能技术在这一年发展的详细总结。 #### 无线通信技术的飞速演进 无线通信…

深入MapReduce——从MRv1到Yarn

引入 我们前面篇章有提到&#xff0c;和MapReduce的论文不太一样。在Hadoop1.0实现里&#xff0c;每一个MapReduce的任务并没有一个独立的master进程&#xff0c;而是直接让调度系统承担了所有的worker 的master 的角色&#xff0c;这就是Hadoop1.0里的 JobTracker。在Hadoop1…

【Linux网络编程】数据链路层

前言&#xff1a; 数据链路层非常简单&#xff0c;对于程序员来说&#xff0c;这里只需要大致了解即可&#xff0c;本篇文章不做重点说明。 数据链路层介绍 数据链路层是OSI位于物理层之上和网络层之下&#xff0c;这一层的报文叫做帧。它的主要任务是确保数据从一个节点可靠地…

go变量、打印、注释

Go 语言定义变量 变量&#xff1a;程序运行过程中的数据都是保存在内存中&#xff0c;我们想要在代码中操作某个数据时就需要去内存上找到这个变量&#xff0c;但是如果我们直接在代码中通过内存地址去操作变量的话&#xff0c;代码的可读性会非常差而且还容易出错&#xff0c;…

【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南

文章目录 &#x1f30d;一. WEB 开发❄️1. 介绍 ❄️2. BS 与 CS 开发介绍 ❄️3. JavaWeb 服务软件 &#x1f30d;二. Tomcat❄️1. Tomcat 下载和安装 ❄️2. Tomcat 启动 ❄️3. Tomcat 启动故障排除 ❄️4. Tomcat 服务中部署 WEB 应用 ❄️5. 浏览器访问 Web 服务过程详…

fpga系列 HDL:XILINX Vivado ILA FPGA 在线逻辑分析

ILA为内置逻辑分析仪&#xff0c;通过JTAG与FPGA连接&#xff0c;程序在真实硬件中运行&#xff0c;功能类似Quaruts的SignalTap II 。 ip创建ila 使用ila ip核 timescale 1ns / 1ps module HLSLED(input wire clk ,input wire rst_n ,output wire led);// reg led_o_i 1…

如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景

Spring AOP在默认情况下使用的动态代理方式&#xff0c;可以比作是餐厅里的“智能服务员助手”。 Spring AOP默认提供了两种动态代理方式&#xff1a;JDK动态代理和CGLIB代理。其选择取决于被代理的对象是否实现了接口&#xff0c;以及配置的代理模式。默认情况下&#xff0c;…

北京门头沟区房屋轮廓shp的arcgis数据建筑物轮廓无偏移坐标测评

在IT行业中&#xff0c;地理信息系统&#xff08;GIS&#xff09;是用于处理、分析和展示地理空间数据的重要工具&#xff0c;而ArcGIS则是GIS领域中的一款知名软件。本文将详细解析标题和描述中提及的知识点&#xff0c;并结合“门头沟区建筑物数据”这一标签&#xff0c;深入…