当前位置: 首页 > news >正文

WPF Binding 绑定

绑定是 wpf 开发中的精髓,有绑定才有所谓的数据驱动。

1 . 背景

目前 wpf 界面可视化的控件,继承关系如下,
在这里插入图片描述

控件的数据绑定,基本上都要借助于 FrameworkElement 的 DataContext 属性。

只有先设置了控件的 DataContext 属性,再设置绑定才能生效(TemplateBinding、使用 RelativeSource、后台 new Binding、静态资源等特殊情况另外讨论)。

2. 绑定的参与对象

绑定过程涉及到两个重要的对象

  1. 绑定目标

数据源绑定到的 依赖属性,只有依赖属性才能作为绑定目标。例如 TextBlock.TextPropertyItemsControl.ItemsSourceProperty

不是只有控件才有依赖属性,普通 CLR 类也可以包括依赖属性。

  1. 绑定源

依赖属性绑定的数据源,例如类中的 属性、界面中的 资源 等。

3. 使用 DataContext 的数据绑定

定义一个包含 2 个只读属性的类型,

public class SampleViewModel
{public string Title { get; }public int Count { get; }public SampleViewModel(){Title = "Hello~";Count = 100;}
}

界面以 UserControl 为例,在构造函数中设置整个界面的 DataContext。

DataContext 会自动从父类向子类传递,子元素也可重新设置 DataContext 属性为其它值。

设置界面控件的 DataContext,

public partial class BindingView : UserControl
{public BindingView(){InitializeComponent();DataContext = new SampleViewModel();}
}

3.1 在前端代码中设置绑定

<UserControlx:Class="WpfApp1.Views.BindingView"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:viewModels="clr-namespace:WpfApp1.ViewModels"d:DataContext="{d:DesignInstance viewModels:SampleViewModel}"d:DesignHeight="450"d:DesignWidth="800"mc:Ignorable="d"><Grid Background="DeepPink" Width="100" Height="100"><StackPanel><TextBlock Margin="4" Text="{Binding Title}" /><TextBlock Margin="4" Text="{Binding Count}" /></StackPanel></Grid>
</UserControl>

显示结果,
在这里插入图片描述

3.2 在后端代码中设置绑定

将前端绑定代码去掉,并设置控件的 x:Name 属性值,

<Grid Background="DeepPink" Width="100" Height="100"><StackPanel><TextBlock x:Name="Text1" Margin="4" /><TextBlock x:Name="Text2" Margin="4" /></StackPanel>
</Grid>

在后端中手动绑定,

public BindingView()
{InitializeComponent();DataContext = new SampleViewModel();//后台代码绑定var binding1 = new Binding("Title"){Source = this.DataContext,};var binding2 = new Binding("Count"){Source = this.DataContext,};this.Text1.SetBinding(TextBlock.TextProperty, binding1);this.Text2.SetBinding(TextBlock.TextProperty, binding2);
}

同样可以实现绑定。

上面的例子,绑定参与对象是:

绑定目标:TextBlock.TextProperty 依赖属性
绑定源:this.DataContext 即 SampleViewModel 实例
绑定路径:TitleCount

也可以简单点说,

绑定目标:TextBlock.TextProperty 依赖属性
绑定源: SampleViewModel 实例的 TitleCount 属性

一般推荐直接在前端绑定,有特殊业务需求才会在后台动态绑定。

4. 不使用 DataContext 的数据绑定

不设置 DataContext 的情况下, 也可以使用绑定,比如绑定界面控件或控件的属性、页面资源等。

xmlns:system="clr-namespace:System;assembly=mscorlib"
<UserControl.Resources><system:String x:Key="Content">我是静态资源</system:String>
</UserControl.Resources><Grid Background="DeepPink" Width="100" Height="100"><StackPanel><!-- 绑定 CLR 属性 --><TextBlock x:Name="Text1" Margin="4" Text="{Binding Title}" /><!-- 绑定控件 --><TextBlock x:Name="Text2" Margin="4" Text="" Tag="{Binding ElementName=Text1}" /><!-- 绑定控件属性 --><TextBlock x:Name="Text3" Margin="4" Text="{Binding ElementName=Text2, Path=Tag.Text}" /><!-- 绑定页面资源 --><TextBlock x:Name="Text4" Margin="4" Text="{Binding ., Source={StaticResource Content}}" /></StackPanel>
</Grid>

显示,
在这里插入图片描述

总结,

绑定目标必须是依赖属性,绑定源可以是依赖属性也可以是普通 CLR 属性、静态资源。

5. 绑定模式

以上演示的是简单的数据绑定,仅仅是用来显示,如果我还想把界面数据传回数据源,该如何操作?

以 CheckBox 勾选框为例,

<Grid Background="DeepPink" Width="100" Height="100"><CheckBox Margin="4" Content="Mark" IsChecked="{Binding Mark}" />
</Grid>

在这里插入图片描述
绑定源:

public class BindingModeViewModel
{private bool _mark = true; //默认勾选public bool Mark{get => _mark;set{if (_mark != value){_mark = value;Console.WriteLine($"Mark changed to {_mark}");}}}
}

取消勾选并再次勾选,结果,

Mark changed to False
Mark changed to True

接下来对控件绑定做一些改动,

<CheckBox Margin="4" Content="Mark" IsChecked="{Binding Mark, Mode=OneWay}" />

发现操作 CheckBox,不再会打印信息了。那是因为设置绑定模式 Mode=OnWay 就表示只支持从数据源到界面目标的单向绑定。

绑定模式有如下几种,

public enum BindingMode
{TwoWay, //双向绑定OneWay, //单向绑定:从数据源到目标OneTime, //单次绑定:只绑定一次OneWayToSource, //单向绑定:从目标到数据源Default, //默认绑定:根据数据源和目标自动决定
}

所以,这里我把 Mode 设置为 TwoWay、OneWayToSource、Default(不设置就是默认绑定)都可以打印出来信息。

到此,演示了:

  1. 从数据源获取数据到目标(如 TextBlock)
  2. 从目标设置数据到数据源(如 CheckBox)

那如果,我要从数据源设置动态数据到目标,该如何操作?这就要用到一个接口。

6. INotifyPropertyChanged 接口

public interface INotifyPropertyChanged
{event PropertyChangedEventHandler PropertyChanged;
}

INotifyPropertyChanged 是一个接口,用于在属性值发生变化时通知绑定的客户端。在 WPF 应用程序中,这通常用于实现数据绑定,使得 UI 元素能够在源数据动态变化时自动更新。

简单实现,

public class MyNotifyClass : INotifyPropertyChanged
{public event PropertyChangedEventHandler PropertyChanged;public void RaisePropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}

改动一下数据源,

public class BindingModeViewModel : MyNotifyClass
{private bool _mark = true;private string _printMessage;public bool Mark{get => _mark;set{if (_mark != value){_mark = value;PrintMessage = $"Mark changed to {_mark}";}}}public string PrintMessage{get => _printMessage;set{_printMessage = value;RaisePropertyChanged(nameof(PrintMessage));}}
}

调整一下界面,

<Grid Background="DeepPink" Width="200" Height="100"><StackPanel><CheckBox Margin="4" Content="Mark" IsChecked="{Binding Mark}" /><TextBlock Margin="4" Text="{Binding PrintMessage}" /></StackPanel>
</Grid>

点击 CheckBox , TextBlock 会动态显示信息。
在这里插入图片描述
CheckBox 只是通过绑定属性,利用属性 Set 方式触发数据源变化。

如果要像按钮 Button 那样,直接通过方法来触发数据源变化,如果操作呢?就要用到命令绑定。

7. 命令绑定

在 WPF 中,命令绑定是 MVVM 模式的核心部分之一,它允许开发者将视图中的事件如按钮点击与 ViewModel 中的命令逻辑相绑定。这样,当用户界面上的按钮被点击时,可以触发 ViewModel 中定义的命令执行相应的操作,而不需要在代码后面编写事件处理函数。

以按钮 Button 控件为例,按钮的 Command 属性类型是一个 ICommand 接口类型,

public ICommand Command
{get => (ICommand) this.GetValue(ButtonBase.CommandProperty);set => this.SetValue(ButtonBase.CommandProperty, (object) value);
}
  public interface ICommand{/// <summary>当出现影响是否应执行该命令的更改时发生。</summary>event EventHandler CanExecuteChanged;/// <summary>定义确定此命令是否可在其当前状态下执行的方法。</summary>/// <param name="parameter">此命令使用的数据。  如果此命令不需要传递数据,则该对象可以设置为 <see langword="null" />。</param>/// <returns>如果可执行此命令,则为 <see langword="true" />;否则为 <see langword="false" />。</returns>bool CanExecute(object parameter);/// <summary>定义在调用此命令时要调用的方法。</summary>/// <param name="parameter">此命令使用的数据。  如果此命令不需要传递数据,则该对象可以设置为 <see langword="null" />。</param>void Execute(object parameter);}

因此我们只要实现一下 ICommand 接口即可使用自己的命令。

例如,

public class MyCommand : ICommand
{private readonly Action<object> _executeAction;private readonly Func<object, bool> _canExecuteFunc;public event EventHandler CanExecuteChanged;public MyCommand(Action<object> executeAction, Func<object, bool> canExecuteFunc = null){_executeAction = executeAction;_canExecuteFunc = canExecuteFunc;}public void Execute(object parameter){_executeAction?.Invoke(parameter);}public bool CanExecute(object parameter){return _canExecuteFunc == null || _canExecuteFunc(parameter);}public void RaiseCanExecute(){CanExecuteChanged?.Invoke(this, EventArgs.Empty);}
}

在数据源增加相应的命令属性,

public class BindingModeViewModel : MyNotifyClass
{private bool _mark = true;private string _printMessage;public bool Mark{get => _mark;set{if (_mark != value){_mark = value;PrintMessage = $"Mark changed to {_mark}";//更新按钮可点击状态PrintCommand.RaiseCanExecute();}}}public string PrintMessage{get => _printMessage;set{_printMessage = value;RaisePropertyChanged(nameof(PrintMessage));}}public MyCommand PrintCommand { get; }public BindingModeViewModel(){PrintCommand = new MyCommand(Print, CanPrint);}private void Print(object obj){PrintMessage = "This is Button Print.";}private bool CanPrint(object arg){return _mark;}
}

界面增加一个按钮,

<Grid Background="DeepPink" Width="200" Height="100"><StackPanel><CheckBox Margin="4" Content="Mark" IsChecked="{Binding Mark}" /><TextBlock Margin="4" Text="{Binding PrintMessage}" /><Button Content="Print" Width="80" Height="32" Command="{Binding PrintCommand}" /></StackPanel>
</Grid>

点击按钮,命令调用成功,
在这里插入图片描述
取消勾选, 按钮变灰,不可执行命令,
在这里插入图片描述

相关文章:

WPF Binding 绑定

绑定是 wpf 开发中的精髓&#xff0c;有绑定才有所谓的数据驱动。 1 . 背景 目前 wpf 界面可视化的控件&#xff0c;继承关系如下&#xff0c; 控件的数据绑定&#xff0c;基本上都要借助于 FrameworkElement 的 DataContext 属性。 只有先设置了控件的 DataContext 属性&…...

掌握Java分支结构:if和switch详解

在编程中&#xff0c;顺序结构确实只能按照代码的书写顺序依次执行&#xff0c;而无法根据条件进行判断和选择。为了实现程序根据不同情况执行不同代码块的功能&#xff0c;我们需要使用分支结构。Java提供了两种主要的分支结构来帮助开发者实现这一目标&#xff1a; if 语句&…...

ES学习Promise对象(九)

这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器&#xff0c;里面保存着某个未来才会结束的事件&#xff08;通常是一个异步操作&#xff09;的结果。Promise 是一个对象&#xff0c;Promise 提供统一…...

ssh 密钥对文件登录

首先提供我生成的密钥对【test-241222.pem】: -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAkrx1O 【.....】 -----END RSA PRIVATE KEY----- 1. 验证私钥格式 首先,确认test-241222.pem确实是有效的RSA私钥。你可以通过以下命令来验证(在Linux/Mac上): openssl …...

电流、电压,串联电路中,电流为什么处处相等?

电流是什么&#xff1f;串、并联中&#xff0c;电流的关系 飞书链接&#xff0c;看这个&#xff0c;格式更好&#xff0c;提供书籍下载 电流的本质定义&#xff1a; 电流 (I) 是 单位时间内&#xff0c;通过导体截面的电荷量。它的数学定义是&#xff1a; I Δ Q Δ t I \f…...

Python生成学生管理系统,使用qt组件,MySQL 数据库,-1

创建一个基于 Python 的学生管理系统&#xff0c;使用 Qt 组件&#xff08;通过 PyQt5 或 PySide2&#xff09;和 MySQL 数据库&#xff0c;是一个综合性的项目。以下是一个详细的指南&#xff0c;包括环境设置、数据库设计、Python 代码示例以及如何使用 Qt 设计用户界面。 #…...

接口测试Day03-postman断言关联

postman常用断言 注意&#xff1a;不需要手敲&#xff0c;点击自动生成 断言响应状态码 Status code&#xff1a;Code is 200 //断言响应状态码为 200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); });pm: postman的实例 test() …...

微服务分布式(二、注册中心Consul)

首先我们需要安装consul,到官网下载Consul Install | Consul | HashiCorp Developer 在解压的consul目录下 执行启动命令 consul agent -dev 启动服务 -dev表示开发模式 -server表示服务模式 启动后在浏览器访问8500端口http://localhost:8500/可以看到服务管理界面 项目…...

sh cmake-linux.sh -- --skip-license --prefix = $MY_INSTALL_DIR

本文来自天工AI --------- 命令用于安装CMake的脚本&#xff0c;其中--skip-license参数表示跳过许可协议的显示&#xff0c;--prefix参数指定了CMake的安装目录。$MYINSTALLDIR是一个环境变量&#xff0c;应该在运行命令之前设置为您想要安装CMake的目录。 -------- sh xx…...

信创技术栈发展现状与展望:机遇与挑战并存

一、引言 在信息技术应用创新&#xff08;信创&#xff09;战略稳步推进的大背景下&#xff0c;我国信创技术栈已然在诸多关键层面收获了亮眼成果&#xff0c;不过也无可避免地遭遇了一系列亟待攻克的挑战。信创产业作为我国达成信息技术自主可控这一目标的关键一招&#xff0c…...

文本图像多模态基础-clip的细节解读

目录 一、我写的目的 二、原文出处 三、方法和benchmark 3.1 方法原理 3.2 值得注意的代码细节 实际的损失函数计算&#xff1a; evaluation的计算&#xff1a; backbone的类型&#xff1a; 3.3 benchamrk 推理时的细节-benchmark比较&#xff1a; 经典benchmark对…...

c4d动画怎么导出mp4视频,c4d动画视频格式设置

宝子们&#xff0c;今天来给大家讲讲 C4D 咋导出mp4视频的方法。通过用图文教程的形式给大家展示得明明白白的&#xff0c;让你能轻松理解和掌握&#xff0c;不管是理论基础&#xff0c;还是实际操作和技能技巧&#xff0c;都能学到&#xff0c;快速入门然后提升自己哦。 c4d动…...

Mysql复习(二)

一、 DBMS&#xff1a;是管理数据库的软件的集合&#xff0c;是用户访问数据库的接口。主要功能&#xff1a;数据定义、数据操纵、数据库运行管理、数据库建立与维护等 二、 关系模式的完整性规则包括&#xff08;实体完整性、参照完整性和用户自定义完整性&#xff09; 实体…...

【芯片设计- RTL 数字逻辑设计入门 番外篇 13 -- FAB厂中PE工程师和PIE工程师的区别】

文章目录 Overview岗位职责的核心区别PE工程师:岗位要求的差异PE工程师接触面和协作关系后期职业发展方量产与研发的区别转自: 老虎说芯 老虎说芯 2024年12月20日 12:30 广东 Overview 在导体制造行业中,PE工程师(Process Engineer,工艺工程师)和PIE工程师(Process Int…...

java中的输入输出

目录 1.基本概念1.标准输入流&#xff08;System.in&#xff09;&#xff1a;2.标准输出流&#xff08;System.out&#xff09;&#xff1a;3.Scanner 类&#xff1a;4.File 类&#xff1a;&#xff16;.BufferedReader 和 BufferedWriter&#xff1a;7.PrintWriter&#xff1a…...

java抽奖系统(八)

9. 抽奖模块 9.1 抽奖设计 抽奖过程是抽奖系统中最重要的核⼼环节&#xff0c;它需要确保公平、透明且⾼效。以下是详细的抽奖过程设计&#xff1a; 对于前端来说&#xff0c;负责控制抽奖的流程&#xff0c;确定中奖的人员 对于后端来说&#xff1a; 接口1&#xff1a;查询完…...

在技术文档中多使用各种图

有些事情在文档中掰扯十几页&#xff0c;不如一幅图讲的明白&#xff01;举个例子下面这幅图就是一个EDI 835电子报文&#xff08;就是医保了&#xff0c;美国加州的&#xff09;的业务流程。如果纯靠文字来描述&#xff0c;写很多文字不一定能说清楚。所以俺画了这幅图&#x…...

GB28181学习总结

GB28181学习总结 前言 我认为&#xff0c;学习一个新东西可以分成两步&#xff1a; 作用是什么&#xff1f; 原理是什么&#xff1f; 所以本文将从两个问题出发&#xff0c;对GB28181进行总结&#xff1a; GB28181是什么&#xff1f; GB28181原理是什么&#xff1f; GB…...

矩阵论:Vector-Valued Linear and Affine Functions介绍:中英双语

最近在翻看 这本书&#xff0c;对其中的一些英文概念做一些记录。 Link&#xff1a;https://web.stanford.edu/~boyd/books.html 中文版 向量值线性函数和仿射函数的详解 在机器学习、数据科学和工程应用中&#xff0c;向量值线性函数和仿射函数是非常重要的数学工具。本…...

网络七层杀伤链

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&…...

某狐畅游24校招-C++开发岗笔试(单选题)

某狐畅游24校招-C开发岗笔试 目录 某狐畅游24校招-C开发岗笔试一、单选题二、单选题解析 本文题目源来自&#xff1a;[PTA程序设计类实验辅助教学平台](PTA | 程序设计类实验辅助教学平台) 一、单选题 1-1 若有说明 int a[2][3]; 则对 a 数组元素的正确引用是 A. a[0][11]B. …...

spring mvc | servlet :serviceImpl无法自动装配 UserMapper

纯注解SSM整合 解决办法&#xff1a; 在MybatisConfig添加 Configuration MapperScan("mapper")...

在 CentOS 上安装 MySQL 8

在 CentOS 上安装 MySQL 8 您可以按照以下步骤操作&#xff1a; 1. 更新系统 首先&#xff0c;更新系统软件包以确保安装的最新版本。 sudo yum update -y 2. 安装 MySQL 8 安装 MySQL 存储库 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.r…...

EMC VMAX/DMX 健康检查方法

近期连续遇到2个由于对VMAX存储系统没有做及时的健康检查&#xff0c;出现SPS电池故障没有及时处理&#xff0c;然后同一pair就是同一对的另外一个SPS电池再次出现故障&#xff0c;然后存储系统保护性宕机vault&#xff0c;然后业务系统挂掉的案例。 开始之前&#xff0c;先纠…...

深入理解Kafka:核心设计与实践原理读书笔记

目录 初识Kafka基本概念安装与配置ZooKeeper安装与配置Kafka的安装与配置 生产与消费服务端参数配置 生产者客户端开发消息对象 ProducerRecord必要的参数配置发送消息序列化分区器生产者拦截器 原理分析整体架构元数据的更新 重要的生产者参数acksmax.request.sizeretries和re…...

Ubuntu命令行网络配置

临时连接 为什么需要临时连接&#xff0c;你最好测试你的网络适配器驱动能够连接到网络&#xff0c;然后再进行进一步的配置自动连接&#xff0c;否则也许会一直处在“折腾”中。 查看网络状态 ip addr show激活网络接口&#xff1a; sudo ip link set <适配器名称> up使…...

Wireshark软件下载安装及基础

前言 本次学习的是在b站up主泷羽sec课程有感而发&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 &#xff01;&#xff01;…...

16asm - 宏汇编语法

文章目录 前言宏汇编表达式算术表达式逻辑运算关系运算符 标号匿名标号调整偏移量指令ORG当前地址指令$ 结构体宏equ语句语句macro语句 多文件编译源文件头文件函数使用全局变量编译 选择结构循环结构 总结 前言 各位师傅大家好&#xff0c;我是qmx_07,今天讲解 宏汇编的相关内…...

5.C语言内存分区-堆-栈

目录 内存分区 运行之前 代码区 全局初始化数据区 、静态数据区 (data) 未初始化数据区(bss&#xff08;Block Started by Symbol&#xff09;区) 总结 运行之后 代码区 &#xff08;text segment&#xff09; 未初始化数据区(bss) 全局初始化数据区&#xff0c;静态…...

【模拟】饮料促销

题目描述 暑期到了&#xff0c;各大商场都开始举办饮料促销优惠活动&#xff0c;卡卡维他命水凭3个瓶盖可以再换一瓶并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下&#xff0c;如果小明不浪费瓶盖&#xff0c;尽量地参加活动&#xff0c;那么对于他初始买入的 n 瓶…...

RFdiffusion get_torsions函数解读

函数功能 get_torsions 函数根据输入的原子坐标(xyz_in)和氨基酸序列(seq),计算一组主链和侧链的扭转角(torsions)。同时生成备用扭转角(torsions_alt),用于表示可以镜像翻转的几何结构,并返回掩码(tors_mask)和是否平面化(tors_planar)的信息。 输入参数 xyz…...

重拾设计模式--组合模式

文章目录 1 、组合模式&#xff08;Composite Pattern&#xff09;概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式&#xff08;Composite Pattern&#xff09;概述 定义&#xff1a;组合模式是一种结构型设计模式&#xff0c;它允许你将对象组合成…...

IntelliJ IDEA Docker集成

一、概述 Docker是一种用于在隔离和可复制环境中部署和运行可执行文件的工具。这可能很有用&#xff0c;例如&#xff0c;在与生产相同的环境中测试代码。 IntelliJ IDEA集成了Docker功能&#xff0c;并为创建Docker映像、运行Docker容器、管理Docker Compose应用程序、使用公…...

【Blender】【源码详解】BLI_mesh_boolean 实现详解

1. 背景&#xff1a; 最近因为项目需要&#xff0c;需要阅读 Blender 中关于 mesh boolean 的源码&#xff1b;因此&#xff0c;对 blender 中的 mesh boolean 源码进行解读&#xff1b; Github 上源码下载很慢&#xff0c;一般使用 Gitee: gitee Blender 源码 2. Mesh Boole…...

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器&#xff0c;用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…...

C语言 函数嵌套

#include <stdio.h> void new_line() {printf("hehe\n"); } void three_line() {int i 0;for (i 0; i < 3; i){new_line;} } int main() {three_line();return 0; } 函数可以嵌套调用&#xff0c;但不能嵌套定义 链式访问 main有三个参数 //main函数的…...

Android adb查看某个进程的总线程数

Android adb查看某个进程的总线程数 adb shell 进入控制台&#xff0c;然后&#xff1a; top -m 20 列出当前系统的进程&#xff0c;找到目标进程的id&#xff0c; ps -T 进程id | wc -l Android adb shell ps进程查找以及kill-CSDN博客文章浏览阅读777次&#xff0c;点赞3次&a…...

安装milvus以及向量库增删改操作

首先电脑已经安装了docker windows电脑可下载yml文件 https://github.com/milvus-io/milvus/releases/download/v2.4.6/milvus-standalone-docker-compose.yml 创建milvus文件夹&#xff0c;并在这个目录下创建五个文件夹&#xff1a;conf、db、logs、pic、volumes、wal 然后…...

基于深度学习多图像融合的屏幕缺陷检测方案

公司项目&#xff0c;已申请专利。 深度学习作为新兴技术在图像领域蓬勃发展&#xff0c;因其自主学习图像数据特征的性能避免了人工设计算法的繁琐&#xff0c;精准的检测性能、高效的检测效率以及对各种不同类型的图像任务都有比较好的泛化性能&#xff0c;使得深度学习技术在…...

OAuth 2.0

简介 OAuth 是一种开放标准的授权协议或框架&#xff0c;它提供了一种安全的方式&#xff0c;使第三方应用程序能够访问用户在其他服务上的受保护资源&#xff0c;而无需共享用户的凭证&#xff08;如用户名和密码&#xff09;。OAuth 的核心思想是通过“授权令牌”来代替直接…...

2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题

2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题&#xff08;选择题&#xff09; 题目总数&#xff1a;5 总分数&#xff1a;50 选择题 第 1 题 单选题 Scratch运行以下程宇后&#xff0c;小兔子会&#xff08; &#xff09;。 A. 变小 B. 变大 C. 变色 D. …...

pat乙级1072 开学寄语

下图是上海某校的新学期开学寄语&#xff1a;天将降大任于斯人也&#xff0c;必先删其微博&#xff0c;卸其 QQ&#xff0c;封其电脑&#xff0c;夺其手机&#xff0c;收其 ipad&#xff0c;断其 wifi&#xff0c;使其百无聊赖&#xff0c;然后&#xff0c;净面、理发、整衣&am…...

【Linux系统编程】:信号(2)——信号的产生

1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号&#xff0c;比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍&#xff0c;本文介绍下面三种. 2. 调用函数产生信号 2.1 k…...

Qwen2.5-7B 微调rz吧数据集

Qwen2.5-7B 微调弱智吧数据集 模型微调简介 模型微调是一种在已有预训练模型的基础上&#xff0c;通过使用特定任务的数据集进行进一步训练的技术。这种方法允许模型在保持其在大规模数据集上学到的通用知识的同时&#xff0c;适应特定任务的细微差别。使用微调模型&#xff…...

未来将要被淘汰的编程语言

COBOL - 这是一种非常古老的语言&#xff0c;主要用于大型企业系统和政府机构。随着老一代IT工作人员的退休&#xff0c;COBOL程序员变得越来越少。Fortran - 最初用于科学和工程计算&#xff0c;Fortran在特定领域仍然有其应用&#xff0c;但随着更现代的语言&#xff08;如Py…...

翻转(蓝桥杯2023大学C组试题E)

【问题描述】&#xff1a;小蓝用黑白棋的n个棋子排成了一行&#xff0c;他在脑海里想象出了一个长度为n的01串T&#xff0c;他发现如果把黑棋当作1、白棋当做0&#xff0c;这一行棋子是一个长度为n的01串S。 小蓝如果在S中发现一颗棋子和它两边的棋子都不一样&#xff0c;可以将…...

期权VIX指数构建与择时应用

芝加哥期权交易 所CBOE的波动率指数VIX 是反映 S&P 500 指数未来 30 天预测期波动率的指标&#xff0c;由于预期波动率多用于表征市场情绪&#xff0c;因此 VIX 也被称为“ 恐慌指数”。 VIX指数计算 VIX 反映了市场情绪和投资者的风险偏好&#xff0c; 对于欧美市场而言…...

Nginx界的天花板-Oracle 中间件OHS 11g服务器环境搭建

环境信息 服务器基本信息 如下表&#xff0c;本次安装总共使用2台服务器&#xff0c;具体信息如下&#xff1a; 服务器IP DNS F5配置 OHS1 172.xx.xx.xx ohs01.xxxxxx.com ohs.xxxxxx.com OHS2 172.xx.xx.xx ohs02.xxxxxx.com 服务器用户角色信息均为&#xff1a;…...

torch.unsqueeze:灵活调整张量维度的利器

在深度学习框架PyTorch中&#xff0c;张量&#xff08;Tensor&#xff09;是最基本的数据结构&#xff0c;它类似于NumPy中的数组&#xff0c;但可以在GPU上运行。在日常的深度学习编程中&#xff0c;我们经常需要调整张量的维度以适应不同的操作和层。torch.unsqueeze函数就是…...

为什么使用环形队列

1.看以下两种情况。第一种不会出现问题&#xff0c;当主流程读取次数比较慢时&#xff0c;数据会被覆盖。 2.扩大空间。不可取。 3.什么是队列...