博客 (73)

本文由 ChatGTP 3.5 提供


在 .NET C# 桌面应用程序中,你可以使用委托和事件来实现在窗体页面处理事务过程中实时更新界面。下面是一个示例,展示了在不同情况下如何更新主界面:

首先,在窗体页面中定义一个委托和一个事件,用于更新界面:

public delegate void UpdateUIHandler(string msg);
public event UpdateUIHandler UpdateUIEvent;

然后,在窗体的构造函数中订阅事件,并在事件处理程序中更新界面:

public Form1()
{
    InitializeComponent();
    UpdateUIEvent += UpdateUI;
}

private void UpdateUI(string msg)
{
    if (InvokeRequired)
    {
        Invoke(new UpdateUIHandler(UpdateUI), msg);
    }
    else
    {
        // 在这里更新界面
        label1.Text = msg;
    }
}

现在,你可以在窗体页面的任何地方调用 UpdateUIEvent 来触发更新界面的事件。例如,在按钮点击事件中:

private void button1_Click(object sender, EventArgs e)
{
    // 处理事务过程中实时更新界面
    string msg = "处理事务中...";
    UpdateUIEvent?.Invoke(msg);

    // 异步调用一个类方法中的方法,并在方法内部实时更新主界面
    Task.Run(() =>
    {
        MyClass myClass = new MyClass();
        myClass.LongRunningMethod(UpdateUIEvent);
    });
}

在上面的示例中,MyClass 是一个自定义的类,其中的 LongRunningMethod 是一个耗时的方法。在这个方法内部,你可以通过传递 UpdateUIEvent 来实时更新主界面:

public class MyClass
{
    public void LongRunningMethod(UpdateUIHandler updateUI)
    {
        // 处理事务过程中实时更新界面
        string msg = "处理事务中...";
        updateUI?.Invoke(msg);

        // 其他耗时操作...
    }
}

通过以上示例,你可以在窗体页面处理事务过程中实时更新界面,并且在异步调用的方法内部也能实时更新主界面。记得在更新界面时使用 Invoke 方法,以确保在主线程上更新界面,避免跨线程访问 UI 的问题。

xoyozo 2 年前
2,979

语言集成查询(LINQ)为 C# 和 VB 提供语言级查询功能和高阶函数 API,让你能够编写具有很高表达力度的声明性代码。

LINQ 有两种写法:查询语法和方法语法,查询语法又称查询表达式语法。

查询语法:

from 变量名 in 集合 where 条件 select 结果变量

方法语法:

集合.Where(变量名 => 条件)


LINQ 的标准查询运算符及语法示例

类型操作符功能方法语法查询语法
投影操作符Select用于从集合中选择指定的属性或转换元素
cats.Select(cat => cat.color)
from cat in cats
select cat.color
SelectMany用于在嵌套集合中选择并平铺元素
families.SelectMany(family => family.members
.Select(member => member.name))
from family in families
from member in family.members
select member.name
限制操作符Where根据指定的条件筛选集合中的元素
cats.Where(cat => cat.color == "white")
from cat in cats
where cat.color == "white"
select cat
排序操作符

OrderByOrderByDescending、ThenBy、ThenByDescending

用于对集合中的元素进行排序
cats.OrderBy(cat => cat.age)
from cat in cats
order by cat.age
select cat
Reverse将集合中的元素顺序反转
cats.Reverse()


联接操作符

Join

GroupJoin

用于在两个集合之间执行内连接(Join)操作,或者对一个集合进行分组连接(GroupJoin)操作内联接
families.Join(
    members,
    family => family.familyId,
    member => member.familyId,
    (family, member) => new
    {
        family.familyId,
        member.name,
    })

左连接

families.GroupJoin(
    members,
    family => family.familyId,
    member => member.familyId,
    (family, familyMembers) => new
    {
        family.familyId,
        name = familyMembers.FirstOrDefault()?.name
    })


内联接
from family in families
join member in members on family.familyId equals member.familyId
select new
{
    family.familyId,
    member.name,
}

左连接

from family in families
join member in members on family.familyId equals member.familyId into g
from member in g.DefaultIfEmpty()
select new
{
    family.familyId,
    name = member?.name,
}


分组操作符GroupBy根据指定的键对集合中的元素进行分组

串联操作符Concat将两个集合连接成一个新集合

聚合操作符

AggregateAverage、Count、LongCount、Max、Min、Sum

Aggregate 可以用于在集合上执行自定义的累积函数,其他方法用于计算集合中的元素的平均值、总数、最大值、最小值和总和

集合操作符

DistinctUnion、Intersect、Except

用于执行集合间的不同操作,Distinct 移除重复元素,Union 计算两个集合的并集,Intersect 计算两个集合的交集,Except 计算一个集合相对于另一个集合的差集

生成操作符

EmptyRange、Repeat

Empty 创建一个空集合,Range 创建一个包含一系列连续数字的集合,Repeat 创建一个重复多次相同元素的集合

转换操作符

AsEnumerableCast、OfType、ToArray、ToDictionary、ToList、ToLookup

这些方法用于将集合转换为不同类型的集合或字典

元素操作符

DefaultIfEmptyElementAtElementAtOrDefaultFirst、Last、FirstOrDefault、LastOrDefault、Single、SingleOrDefault

这些方法用于获取集合中的元素,处理可能的空集合或超出索引的情况

相等操作符SequenceEqual用于比较两个集合是否包含相同的元素,顺序也需要相同

量词操作符All、Any、Contains用于检查集合中的元素是否满足特定条件,All 检查是否所有元素都满足条件,Any 检查是否有任何元素满足条件,Contains 检查集合是否包含特定元素

分割操作符Skip、SkipWhile、Take、TakeWhile用于从集合中跳过一些元素或只取一部分元素,可以结合特定条件进行操作

了解立即执行延迟执行可以大大改善性能。

xoyozo 2 年前
2,208

本文图片基于网络图片更新,如有侵权,请通过网站底部联系站长删除。

本文内容来源于网络,如有错误欢迎批评指正。


USB 接口类型

USB 接口有 Mini、Micro、Type 三种外观。

  • 通常说的 USB-C 一般指 USB Type-C,因为没有 Mini-C 和 Micro-C。而 USB-A / USB-B 一般也特指 Type-A / Type-B。


数据传输能力

USB 标准(附 Thunderbolt)

规格别名接口类型理论带宽电力规格
备注
USB 1.0Low-Speed

Mini A / B

Micro A / B 2.0

Type A / B 2.0

1.5 Mbps5V/0.5A
USB 1.1Full-Speed12 Mbps5V/0.5A
USB 2.0

Hi-Speed

High Speed

Mini A / B

Micro A / B 2.0

Type A 2.0 / B 2.0 / C

480 Mbps5V/0.5A

USB 3.0

USB 3.1 Gen 1

USB 3.2 Gen 1

SuperSpeed

Micro B 3.0

Type A 3.x / B 3.x / C

5 Gbps

5V/0.9A

PD2.0 100W


USB 3.1

USB 3.1 Gen 2

USB 3.2 Gen 2

SuperSpeed+

Micro B 3.0

Type A 3.x / B 3.x / C

10 Gbps

5V/0.9A

PD2.0 100W


USB 3.2

USB 3.2 Gen 2×2

SuperSpeed 20GbpsType-C20 GbpsPD2.0 100W

USB4 Gen 2×2

USB4 20Gbps

Type-C20 Gbps

PD3.0 100W

PD3.1 240W

兼容 Thunderbolt 3
USB4 Gen 3×2USB4 40GbpsType-C40 Gbps
USB4 2.0USB4 80GbpsType-C80 Gbps

Thunderbolt 1雷雳1、雷电1Mini DisplayPort10 Gbps

Thunderbolt 2雷雳2、雷电2Mini DisplayPort20 Gbps

Thunderbolt 3雷雳3、雷电3Type-C40 Gbps

配件供电 15W

PD 100W

兼容 USB4
Thunderbolt 4雷雳4、雷电4Type-C40 Gbps

配件供电 15W

PD 100W

兼容 Thunderbolt 3
Thunderbolt 5
雷雳5、雷电5Type-C

80Gpb

(带宽增强 120Gpbs)

240WUSB4 V2、DisplayPort 2.1 和 PCI Express Gen 4

数据参考


电力传输能力

常见快充协议

协议版本发布年份区别接口形态

BC

(Battery Charging Specification)

1.22010 年7.5W(5V/1.5A)

高通 QC

(Qualcomm Quick Charge)

1.02013 年
10W(5V/2A)Micro-USB
2.02014 

Class A:5V、9V、12V 电压可选,最大输出功率为 18W?

Class B5V、9V、12V、20V  电压可选,最大输出功率为 60W

Micro-USB / Type-A
3.02015 Class A:3.6-12V,Class B:3.6-20V支持动态调整电压和电流,最大输出功率为 18W?Micro-USB / Type-A / Type-C
4.02017 5V/5.6A 或 9V/3A,最大输出功率为 28W?兼容了 USB PD 2.0 / PD 3.0 PPS?Type-C
4+2019 最大输出功率为 100W?,支持 PPS 协议?兼容 QC2.0~QC3.0Type-C
5.02020 年最大输出功率 > 100W,兼容 QC2.0~QC4+Type-C

USB-PD

(USB Power Delivery)

1.02012 5V、12V、20V 电压可选,最大输出功率为 10WMicro-USB / Type-A / Type-B
2.0
2014 5V3A、9V3A、15V3A、20V3A、20V5A(E-Marked,最大输出功率为 100WType-C
3.02015 5V3A、9V3A、15V3A、20V3A、20V5A(E-Marked),最大输出功率为 100WType-C
3.0 PPS2017 年支持 PPS 协议,3.3V-21V 3A-5AType-C
3.12021 

SPR 最高支持 20V 电压,最大输出功率为 100W

EPR 最高支持 48V 电压,最大输出功率为 240W

Type-C
3.22023年强制 AVS,优化 EPRType-C
  • 华为 SuperCharge(FCP / SCP)、小米 Mi Turbo Charge、OPPO VOOC、vivo FlashCharge、三星 AFC 等私有协议不在此列出。

  • Magsafe 电源适配器 是磁吸式有线充电接口最大输出功率为 85W(截止2023年),用于 Macbook;

  • Magsafe 充电器 是磁吸式无线充电接口最大输出功率为 15W(截止2023年),用于 iPhone不属于快充。

  • Qi 是无线充电协议,Qi1 最大输出功率为 7.5W,Qi2 最大输出功率为 15W。

  • 功率决定充电速度,功率与电压电流的关系:P=U*I,如 5V1A=5W

  • 一条 USB 线由插座/母口(Receptacle)、插头/公口(Plug)和线缆(Cable)三部分组成,要实现某个协议,需要插座和插头都支持该协议

  • PPS:Programmable Power Supply 可编程电源

  • SPR:Standard Power Range 标准功率范围

  • EPR:Extended Power Range 扩展功率范围

  • FCP:Fast Charge Protocol 华为早期快充协议,支持 18W

  • SCP:Super Charge Protocol 华为超级快充协议,支持 22.5W、40W


xoyozo 3 年前
14,562

本文将详细介绍 stable diffusion webui 的下载、安装及问题解决。
Stable Diffusion 是 2022 年发布的深度学习文本到图像生成模型。它主要用于根据文本的描述产生详细图像,尽管它也可以应用于其他任务,如内补绘制、外补绘制,以及在提示词(英语)指导下产生图生图的翻译。它是一种潜在扩散模型,由慕尼黑大学的 CompVis 研究团体开发的各种生成性人工神经网络。它是由初创公司 StabilityAI,CompVis 与 Runway 合作开发的,并得到 EleutherAI 和 LAION 的支持。
其它问题请参考

一、环境准备

(一)硬件方面:

1. 显存

4G 起步,4G 显存支持生成 512*512 大小图片,超过这个大小将卡爆失败。

2. 硬盘

10G 起步,模型基本都在 5G 以上,有个 30G 硬盘不为过吧?现在硬盘容量应该不是个问题。

(二)软件方面:

1. Git

https://git-scm.com/download/win
下载最新版即可,对版本没有要求。

2. Python

https://www.python.org/downloads/
截止发稿(2023.3.6)时,最高版本只能用 3.10.*,用 3.11.* 会出问题。

3. Nvidia CUDA

https://developer.download.nvidia.cn/compute/cuda/11.7.1/local_installers/cuda_11.7.1_516.94_windows.exe
版本 11.7.1,搭配 Nvidia 驱动 516.94,可使用最新版。

4. stable-diffusion-webui

https://github.com/AUTOMATIC1111/stable-diffusion-webui
核心部件当然用最新版本~~但注意上面三个的版本的兼容性。

5. 中文语言包

https://github.com/VinsonLaro/stable-diffusion-webui-chinese
下载 chinese-all-0306.jsonchinese-english-0306.json 文件

6. 扩展(可选)

https://github.com/Mikubill/sd-webui-controlnet
下载整个 sd-webui-controlnet 压缩包

https://huggingface.co/Hetaneko/Controlnet-models/tree/main/controlnet_safetensors
https://huggingface.co/lllyasviel/ControlNet/tree/main/models
https://huggingface.co/TencentARC/T2I-Adapter/tree/main
试用时先下载第一个链接中的 control_openpose.safetensors 或 第二个链接中的 control_sd15_openpose.pth 文件

7. 模型

https://huggingface.co/models
https://civitai.com
可以网上去找推荐的一些模型,一般后缀名为 ckptptpthsafetensors ,有时也会附带 VAE(.vae.pt)或配置文件(.yaml)。

类型文件格式存放目录备注
check point.ckpt,.safetensors\models\Stable-diffusion文件较大
vae名字带有 vae 的\models\vae细节更好地恢复,特别是眼睛和文字
Textual Inversion*.pt\embeddings一般文件很小,额外的 tag
Lora*.pt\models\Lora调整模型,理解为风格化也可以
Hypernetworks.pt,.ckpt,*.safetensors\models\hypernetworks和 lora 工作方式相似,算法不同

这里可以学习一下模型的基本概念《解析不同种类的 Stable Diffusion 模型 Models,再也不用担心该用什么了

二、安装流程

1. 安装 Git

就正常安装,无问题。

2. 安装 Python

建议安装在非 program files、非 C 盘目录,以防出现目录权限问题。
注意安装时勾选 Add Python to PATH,这样可以在安装时自动加入 windows 环境变量 PATH 所需的 Python 路径。

3. 安装 Nvidia CUDA

正常安装,无问题。

4. 安装 stable-diffusion-webui

国内需要用到代理和镜像,请按照下面的步骤操作:

a) 编辑根目录下 launch.py 文件
将 https://github.com  替换为 https://ghproxy.com/https://github.com,即使用  Ghproxy 代理,加速国内 Git。
如图将代码中所有类似地址都改掉(注意:不仅仅是图中所展示的这些)。

b) 执行根目录下 webui.bat 文件
根目录下将生成 tmp 和 venv 目录。

c) 编辑 venv 目录下 pyvenv.cfg 文件
将 include-system-site-packages = false 改为 include-system-site-packages = true

d) 配置 python 库管理器 pip
方便起见,在 \venv\Scripts 下打开 cmd 后执行如下命令:

pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ # 镜像
pip freeze > requirements_versions.txt # 创建文件
pip install -r requirements_versions.txt # 执行此条命令前,请检查你的剩余磁盘空间
pip install xformer # 如果不执行此条命令,启动 Stable Diffusion 时可能会出现错误。xformer 还可以在后续使用中降低显卡占用。

xformer 会安装到 \venv\Lib\site-packages 中,安装失败可以用 pip install -U xformers 命试试。

e) 安装语言包
将文件 chinese-all-0306.jsonchinese-english-0306.json 放到目录 \localizations 目录中。
运行 webui 后进行配置,操作方法见下。

f) 安装扩展(可选)
将 sd-webui-controlnet 解压缩到 \extensions 目录中。
将 control_sd15_openpose.pth 文件复制到 /extensions/sd-webui-controlnet/models 目录中。
不同的扩展可能还需要安装对应的系统,比如 controlnet 要正常使用则还需要安装 ffmpeg 等。

g) 安装模型
下载的各种模型放在 \models\Stable-diffusion 目录中即可。

h) 再次执行根目录下 webui.bat 文件
用浏览器打开 webui.bat 所提供的网址即可运行。

其中提供了网址:http://127.0.0.1:7860

打开该网址后在 Settings -> User interface -> Localization (requires restart) 设置语言,在菜单中选择 chinese-all-0220(前提是已经在目录中放入了对应语言包,见上),点击 Apply Settings 确定,并且点击 Reload UI 重启界面后即可。

好了,现在可以开始使用了~~

三、问题及注意点

1. python 版本错误

错误

ERROR: Could not find a version that satisfies the requirement torch==1.13.1+cu117
ERROR: No matching distribution found for torch==1.13.1+cu117

这是由于 python 版本不对导致的(上面提过了,截止发稿时不能追求新版本),要用 python 3.10.* 版本。
解决来源:https://github.com/AUTOMATIC1111/stable-diffusion-webui/issues/7166

2. pip版本错误

警告:

[notice] A new release of pip available: 22.3.1 -> 23.0.1
[notice] To update, run: D:\stable-diffusion-webui\venv\Scripts\python.exe -m pip install --upgrade pip

提示中已经给出了解决方案:
在 \venv\Scripts\ 目录中打开 cmd,执行

python.exe -m pip install --upgrade pip

3. 安装或执行停滞

如果在执行 webui.bat 进行包下载安装时或者生成图片时会卡很久都没反应,那么这时可以复制包名,进入 python 安装目录或 \venv\Scripts\ 目录中打开 cmd,执行

pip install 包名

也可以通过任务管理查看网络状态,如果网络在玩命下载,那么就等着吧~~

4. xFormers 安装不上

很多同学都反应 xformers 无法安装,可以用以下的方法试试:

  • 检查 Dreambooth 要求的 Python 版本:
    如果您的 Python 版本低于 3.6,请安装最新的 Python 版本,并重复尝试安装 xformers。

# 据此可以在终端中运行以下命令,以检查您的 Python 版本:
python --version
  • 安装依赖项:xformers 有许多依赖项,如果这些依赖项没有正确安装可能会导致升级失败。您可以尝试安装以下依赖项:

pip install numpy scipy torch torchaudio transformers
  • 清除 pip 缓存并重新安装:

# 清除 xformers 缓存:运行以下命令清除 xformers 缓存。
pip uninstall -y xformers
pip cache purge

# 更新 pip:确保您正在使用最新版本的 pip,可以运行以下命令更新 pip。
pip install --upgrade pip

# 安装 xformers:在清除了缓存并更新了 pip 之后,重新安装 xformers。
pip install xformers
  • 手动安装 xformers 指定版本
    如果上述步骤仍然无法解决问题,可尝试手动安装 Dreambooth 所需的 xformers 版本。在 Dreambooth 的文档中,可以找到 xformers 的版本要求。

pip install xformers==0.0.17.dev465
  • 使用 conda 环境
    如果您使用的是 conda 环境,请尝试在 conda 环境中安装 xformers。

# 创建 conda 环境
conda create --name myenv

# 激活 conda 环境并安装 xformers
conda activate myenv
pip install xformers
  • 网络问题
    如果已经配置好了代理,就不要考虑这个了。
    检查网络连接:请确保您的计算机与互联网连接,并且网络连接没有被防火墙或代理服务器阻止:

# 检查网络连接是否正常
ping google.com
  • 非必要
    你确定需要使用 xformers 么?如果不需要,可以在 webui-user.bat 中把 --xformers 去掉试试。

  • 其它
    如果上述方法还是无法解决问题,请尝试在 OpenAI 的论坛或者 Dreambooth 的 GitHub 页面上寻求更多帮助。-_-!

5. 其他安装问题

删除 /tmp 和 /venv 目录后重启 webui.bat 试试。

6. 硬件问题

一般显卡不达标,就会爆卡,解决办法就是编辑根目录下 webui-user.bat 文件,试一下修改参数 COMMANDLINE_ARGS 即可。

以下几个设置逐一测试看看哪个适合自己。

set COMMANDLINE_ARGS=--lowvram --precision full --no-half --skip-torch-cuda-test
set COMMANDLINE_ARGS=--lowvram --precision full --no-half
set COMMANDLINE_ARGS=--lowvram

本机显存 4G,使用最后一个配置方法,可以烧出 2048*1080 的图,前两种方法反而会在最后爆卡。

最后,预祝各位成功~~

dog drink~~ where is dog?

在这里插入图片描述

参考:
【AI 繪畫】Stable-Diffusion 通過骨架分析插件 ControlNet 來製作超有意境的圖片
Stable Diffusion 2.1 + WebUI 的安装与使用(极详细)
低配显卡想玩 Stable Diffusion?修改一个配置就行
整合包

转自 暂时先用这个名字 3 年前
5,423

MidjourneyStable Diffusion
收费情况收费开源免费
使用方式联网本地部署(保护隐私?)
学习入门入门简单(学习学习成本较高(学习
内容质量
出图丰富多彩,质量高
内容限制内容有限制内容无限制
可扩展性
可以安装插件(ControlNet 等)
电脑配置
电脑配置有要求(N卡)


xoyozo 3 年前
4,154

本文使用 ASP.NET 6 版本 Senparc.Weixin.Sample.MP 示例项目改造。


第一步 注册多公众号

方法一:打开 appsettings.json 文件,在 SenparcWeixinSetting 节点内添加数组节点 Items,该对象类型同 SenparcWeixinSetting。

//Senparc.Weixin SDK 设置
"SenparcWeixinSetting": {
  "IsDebug": true,
  "Token": "",
  "EncodingAESKey": "",
  "WeixinAppId": "",
  "WeixinAppSecret": "",
  "Items": [
    {
      "IsDebug": true,
      "Token": "a",
      "EncodingAESKey": "a",
      "WeixinAppId": "a",
      "WeixinAppSecret": "a"
    },
    {
      "IsDebug": true,
      "Token": "b",
      "EncodingAESKey": "b",
      "WeixinAppId": "b",
      "WeixinAppSecret": "b"
    }
  ]
}

方法二:修改 Program.cs 文件,在 UseSenparcWeixin 方法中注册多个公众号信息。

var registerService = app.UseSenparcWeixin(app.Environment,
    null /* 不为 null 则覆盖 appsettings  中的 SenparcSetting 配置*/,
    null /* 不为 null 则覆盖 appsettings  中的 SenparcWeixinSetting 配置*/,
    register => { /* CO2NET 全局配置 */ },
    (register, weixinSetting) =>
    {
        //注册公众号信息(可以执行多次,注册多个公众号)
        //register.RegisterMpAccount(weixinSetting, "【盛派网络小助手】公众号");
        foreach (var mp in 从数据库或配置文件中获取的公众号列表)
        {
            register.RegisterMpAccount(new SenparcWeixinSetting
            {
                //IsDebug = true,
                WeixinAppId = mp.AppId,
                WeixinAppSecret = mp.AppSecret,
                Token = mp.Token,
                EncodingAESKey = mp.EncodingAeskey,
            }, mp.Name);
        }
    });

完成后,我们可以从 Config.SenparcWeixinSetting.Items 获取这些信息。


第二步 接入验证与消息处理

打开 WeixinController 控制器,将构造函数改写为:

public WeixinController(IHttpContextAccessor httpContextAccessor)
{
    AppId = httpContextAccessor.HttpContext!.Request.Query["appId"];
    var MpSetting = Services.MPService.MpSettingByAppId(AppId);
    Token = MpSetting.Token;
    EncodingAESKey = MpSetting.EncodingAESKey;
}

示例中 Services.MPService.MpSettingByAppId() 方法实现从 Config.SenparcWeixinSetting.Items 返回指定 appId 的公众号信息。

为使 IHttpContextAccessor 注入生效,打开 Program.cs,在行

builder.Services.AddControllersWithViews();

下方插入

builder.Services.AddHttpContextAccessor();

这样,我们就可以在构造函数中直接获取地址栏中的 appId 参数,找到对应的公众号进行消息处理。


第三步 消息自动回复中的 AppId

打开 CustomMessageHandler.cs,将 

private string appId = Config.SenparcWeixinSetting.MpSetting.WeixinAppId;
private string appSecret = Config.SenparcWeixinSetting.MpSetting.WeixinAppSecret;

替换为:

private string appId = null!;
private string appSecret = null!;

并在构造函数中插入

appId = postModel.AppId;
appSecret = Services.MPService.MpSettingByAppId(postModel.AppId).WeixinAppSecret;

这样,本页中使用的 appId / appSecret 会从 postModel 中获取,而非默认公众号。postModel 已在 WeixinController 中赋值当前的 appId。

改造后,我们可以在 OnTextRequestAsync() 等处理消息的方法中可以判断 appId 来处理不同的消息。


第四步 其它功能和接口

其它功能和接口均可用指定的 AppId 和对应的 AppSecret 进行调用。

xoyozo 4 年前
5,782
制式参数毫来波雷达超声波雷达激光雷达红外传感器光学成像
最大作用距离(m)10001530035无法探知相关的距离、速度和角度信息
速度范围(km/h)≥1000≤100≥300≤10
径向运动
切向运动
静止测距复杂简单简单不能
角度测量能力较好很好不能
环境限制因素全天候、不易受环境影响风、沙尘等雨天温度光线
成本低中
穿透性较长较差
优点不受天气情况和夜间的影响。探测距离远价格低、数据处理简单,体积小巧测距精度高,方向性强,响应时间快,不受地面杂波干扰成本低、夜间不受影响成本适中,可实现道路目标的分辨与识别
缺点
成本较高。目标识别难度较大。可与摄像头互补使用。易受天气和温度影响,最大测量距离一般只有几米成本很高。不能全天候工作。遇浓雾、雨、雪天气无法工作会受天气影响。只能探测到近距离的物体,难以识别出行人与人眼一样会受到视野范围的影响


xoyozo 4 年前
11,285

自 2023 年 4 月起,Windows 11 已经重新支持显示“秒”,无需第三方工具来实现,点击查看详情

ElevenClock 下载地址:GitHub,开源软件放心使用

效果:

image.png

* 该软件不会影响右下角的显示桌面和系统通知功能。


v3.3 设置方法:


√ 在主屏幕上时钟区显示本程序的时钟样式

    ElevenClock 不直接修改任务栏上的时钟区域,而是将时钟覆盖在系统时钟区域的上方。

√ 不要在辅助监视器上显示时钟

    此项按实际需求勾选

√ 时间与日期设置 - Set a custom date and time format (for advanced users only)

    填写以下内容并 Apply

    %H:%M:%S

    %Y/%#m/%#d %a

    如果不想显示星期,把 %a 去掉即可。

√ 使用自定义字体大小

    因分辨率缩放设置不同可能导致显示的字体大小与系统时钟不同,会导致覆盖面过大或过小,从而使系统托盘中的其它图标显示不完整。所以应选择一个与系统时间差不多的字体大小。当显示“周序号”时 ElevenClock 时钟区域可能会远宽于系统时钟区域,可以设置系统时钟显示“星期”(方法见文末)。


v3.2 设置方法:

√ 在主屏幕上时钟区显示本程序的时钟样式

    ElevenClock 不直接修改任务栏上的时钟区域,而是将时钟覆盖在系统时钟区域的上方。

√ 不要在辅助监视器上显示时钟

    此项按实际需求勾选

√ 显示秒数

    这是我们的最终目的。

√ 使用自定义字体大小

    因分辨率缩放设置不同可能导致显示的字体大小与系统时钟不同,会导致覆盖面过大或过小,从而使系统托盘中的其它图标显示不完整。所以应选择一个与系统时间差不多的字体大小。当显示“周序号”时 ElevenClock 时钟区域可能会远宽于系统时钟区域,可以设置系统时钟显示“星期”(方法见文末)。


如何显示系统时间“星期”:

打开“更改日期和时间”,在“日期”选项卡的“短日期”中添加“ddd”。

image.png

xoyozo 4 年前
8,667
功能主动推送方式主动拉取方式
接口规范由数据终端提供接口,数据源端调用接口推送数据由数据源端提供接口,数据终端调用接口拉取数据
定时器由推送方(数据源端)实现由拉取方(数据终端)实现
缓存在不影响正常运行的情况下,数据源端可不做缓存,实时获取并推送数据,消耗资源过大时做缓存数据源端需要做缓存,以避免终端频繁拉取。若因参数值过多而致缓存过大时,应按调用方标识限制接口调用频次
截断标志数据源端记录最后一次推送的数据ID,并在下一次推送时判断此标识往后推送数据数据终端记录最后一次拉取的数据ID,并在下次一拉取时传递给数据源端
日志与故障排查双方都需要保留日志双方都需要保留日志
在有一个数据源端和多个数据终端的系统中

优点:无

缺点:数据源端需要依据不同的数据终端提供的接口规范推送数据,若这些数据终端要求的推送间隔时间不致,则会使用定时器和缓存实现更为复杂

优点:所有终端使用统一的接口规范,数据拉取间隔时间由终端自由决定

缺点:无

在有多个数据源端和一个数据终端的系统中

优点:所有数据源端使用统一的接口规范,数据推送间隔时间由数据源端自由决定

缺点:无

优点:无

缺点:数据终端需要依据不同的数据源端提供的接口规范拉取数据


xoyozo 4 年前
7,728

POST

axios.post('AjaxCases', {
    following: true,
    success: null,
    page: 1,
}).then(function (response) {
    console.log(response.data)
}).catch(function (error) {
    console.log(error.response.data);
});
[HttpPost]
public IActionResult AjaxCases([FromBody] AjaxCasesRequestModel req)
{
    bool? following = req.following;
    bool? success = req.success;
    int page = req.page;
}

GET

axios.get('AjaxCase', {
    params: {
        int: 123,
    }
}).then(function (response) {
    console.log(response.data)
}).catch(function (error) {
    console.log(error.response.data);
});
[HttpGet]
public IActionResult AjaxCases([FromQuery] int id)
{
}

DELETE

格式与 GET 类似


* 若服务端获取参数值为 null,可能的情况如下:

  • 请检查相关枚举类型是否已设置 [JsonConverter] 属性,参:C# 枚举(enum)用法笔记,且传入的值不能为空字符串,可以传入 null 值,并将服务端 enum 类型改为可空。可以以 string 方式接收参数后再进行转换。

  • 模型中属性名称不能重复(大小写不同也不行)。

  • 布尔型属性值必须传递布尔型值,即在 JS 中,字符串 "true" 应 JSON.parse("true") 为 true 后再回传给服务端,vue 绑定方式参此文


参考:jQuery 请求 .NET Core / .NET 5 / .NET 6

xoyozo 4 年前
3,671