在 .NET 中,IDisposable 接口是一个非常重要的接口,它主要用于管理非托管资源的释放。非托管资源是指那些不受 .NET 垃圾回收器(GC)管理的资源,例如文件句柄、数据库连接、网络套接字等。当你使用完这些资源后,需要及时释放它们以避免资源泄漏。IDisposable 接口提供了一种标准的方式来实现资源的释放逻辑。
实现接口1234567891011121314151617181920212223242526272829303132333435363738394041424344454647/// <summary>/// YOLOv8 目标检测预测器,提供基于ONNX模型的物体检测功能/// </summary>public class YoloV8Predictor: IDisposable{ private readonly Yolo yolo; // yolo预测器 public YoloV8Predictor() { // 初始化预测器 } public voi ...
之前我的博客页面都是直接用AI生成的,风格各异,有些甚至看起来很奇怪,整体效果也不是很理想。后来,我看到了张洪Heo的博客封面图,非常吸引人,颜色搭配和设计都很有美感。但是,他的方法对我来说操作起来有一定的难度,不太容易上手。
于是,我在知乎上搜索了(如何制作文章封面图),找到了一些实用的方法。根据我自己的实际情况,对这些方法进行了适当的调整,尝试制作封面图。虽然我已经尽力去改进了,但效果还是比不上张洪Heo的作品那么完美。
制作工具
MasterGo
https://mastergo.com/
boardmix(之前用来画思维导图,开了1年会员,发现用来做图也很方便)
boardmix博思白板官网, AIGC在线生成, 多人协同思维导图, 流程图工具
图标资源
Windows 11 Color风格的标志符号和图标,格式有PNG、SVG
制作图标(可选)boardmix中,使用圆角矩形画出图标背景。
不展示边框
宽度256
高度256
圆角45
添加对应的图标素材,大小调整为210-240左右
选中区域,右键导出为png。
制作封面MasterGo中新建文 ...
问题背景在配置安知鱼主题的关于页面时,发现helloAbout的动效突然不起作用了。如下图所示
原因分析打开调试控制台,发现在about页面存在报错。
通过排查发现,在selfInfo中的selfInfoContentYear我填的不是纯数字导致的。
修改前1234567selfInfo: selfInfoTips1: 生日 selfInfoContentYear: 3 月 5 日 selfInfoTips2: 星座 selfInfoContent2: 双鱼座 selfInfoTips3: 职业 selfInfoContent3: 自动化工程师
修改后1234567selfInfo: selfInfoTips1: 出生 selfInfoContentYear: 1999 selfInfoTips2: 星座 selfInfoContent2: 双鱼座 selfInfoTips3: 职业 selfInfoContent3: 自动化工程师
恢复正常
问题描述通过git进行版本管理时,可以通过.gitignore文件来配置哪些文件或目录应该被忽略,不纳入版本控制系统的管理范围。但是有时在.gitignore文件中添加对应目录或文件后,在Sourcetree的未暂存文件中仍能看到。
可能原因 可能在之前已经将该目录或文件添加到了 Git 的暂存区或已经进行了版本控制,所以 .gitignore 的规则对这些文件暂时不起作用。
解决方法通过以下命令清除已经添加到暂存区的目录或文件。EEITest/app/build只是举例。
1git rm -r --cached EEITest/app/build
开发背景在自动化测试工作中,常常要对测试机进行通话方面的压力测试。此时,配合机有这样的需求:它需要自动接听来自测试机的电话,然后在通话持续一段时间后自动挂断。
特别要注意的是,配合机必须只对测试机拨打的通话进行自动接听,要将其他来电排除在外,不受其干扰,以此确保通话压力测试能够准确、有效地进行。
相关指令adb shell dumpsys telephony.registry:获取当前设备的通话状态信息
mCallState:来电状态。0:空闲状态;1:响铃;2:通话中;
mCallIncomingNumber:来电号码;
mDataConnectionState :数据流量连接状态(可以用来判断是否打开数据流量)
adb shell am start -a android.intent.action.CALL -d tel:xxx:拨打指定电话
adb shell input keyevent 5:接听电话
adb shell input keyevent 6:挂断电话
功能实现123456789101112131415161718192021def autoAnswer(dev ...
代码片段
未读开发背景在自动化测试和脚本化任务中,常需按步骤执行 adb shell 命令及处理结果。链式调用方式可将这些步骤用代码呈现,实现自动化设备管理和测试任务。例如自动化测试时,先通过 shell 命令安装应用,再检查安装结果,之后进行其他操作。使用 ADBShell 类的链式调用能将操作相连,利用 Python 脚本实现自动化流程控制。
功能实现12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152class ADBShell: def __init__(self, device: str): self.shell = None # shell 进程对象 self.device = device self.stdout_adb = "" self.stderr_adb = "" self.start_shell() def start ...
代码片段
未读开发背景在 Windows 系统应用开发与部署中,环境变量 PATH 对查找可执行文件和库文件很重要。手动添加新路径到 PATH 繁琐易错,在多用户环境下还会影响系统稳定性。
因此,开发了一个自动化函数用于向用户级 PATH 添加新路径。因修改需管理员权限,该函数会检查权限,同时避免重复添加,以提高效率和系统可维护性、可扩展性,方便软件安装更新等操作。
功能实现需要管理员权限
C#实现12345678910111213141516171819private bool AddUserEnvironmentVariable(string targetPath){ WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new(identity); if(!principal.IsInRole(WindowsBuiltInRole.Administrator)) // 必须要有管理员权限 return false; // 获 ...
开发背景在开发一个 PyQt 应用程序时,我们经常需要执行一些耗时的操作,例如文件读写、网络请求、复杂的数据处理或长时间的计算。如果这些操作在主线程中执行,会导致用户界面(UI)冻结,用户无法与应用程序进行交互,影响用户体验。为了解决这个问题,我们需要将这些耗时操作放在单独的线程中执行。
然而,直接使用多线程会带来一些复杂性,例如线程的创建、管理、信号和槽机制的使用,以及在多线程环境下处理异常和结果的传递等。为了简化这些操作,因此开发了 Task 和 TaskManager 类。
功能实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990from PyQt5.QtCore import QThread, pyqtSignalclass Task(QThread): ""&q ...
代码片段
未读基础类执行终端命令1234567891011def subPopen(cmd: Union[str, list], shell: bool = True, encoding: str = "utf-8", errors: str = "ignore") -> str: """ 执行cmd命令,返回命令执行结果 :param cmd: 命令 :param shell: 是否使用shell :param encoding: 编码 :param errors: 错误处理方式 :return: 命令执行结果 """ _r = subprocess.Popen(cmd, shell=shell, stdout=subprocess.PIPE) return _r.stdout.read().decode(encoding, errors=errors)
网络类获取当前wifi1234567891011121314151617def ...
开发背景在开发自动化测试工具时,我们经常面临对测试用例进行循环压力测试的需求。由于测试类的重复编写工作量较大,因此计划开发一个抽象基类来简化这一过程。
测试流程测试流程大致如下图所示。
在整个测试流程中存在一个大循环(circle)。首先,执行带有@BeforeClass注解的方法;接着,针对每个测试用例(即带有@Test注解的方法)进行循环测试,在每个测试用例的循环内部,又有一个针对该测试用例自身的循环次数(count)。在这个内部循环中,首先执行带有@Before注解的方法,然后执行具体的测试逻辑,最后执行带有@After注解的方法。
测试结果通过TestResult存储单个测试结果的信息,包括如下内容:
Id:唯一标识
Circle:测试循环次数
Case:测试用例名称
Description:测试用例描述
Count:测试用例执行次数
Status:测试状态,成功/失败
Message:失败时的错误信息
功能实现测试属性123456789101112131415/// <summary>[test]</summary>[Attribut ...