- 博客(107)
- 收藏
- 关注
原创 C# 程序暂停的两种方式
在简单情况下,可以选择`volatilebool`,但在更复杂的多线程情况中, `EventWaitHandle`提供了更为强大的支持。使用`volatileBool`可以简单地实现线程的暂停和恢复,通过检查该布尔值的状态来决定当前线程是否应该继续执行。本文将详细探讨使用`EventWaitHandle`和设置`volatilebool`来实现线程暂停的不同方式,它们的优缺点,以及适用场景。在上面的代码中,`WorkerThread` 方法在每次循环开始时会检查 `waitHandle` 的状态。
2024-11-02 10:00:00 237
原创 C# 文件夹类的实现与文件属性处理
4. **创建日期**: 使用 `DirectoryInfo` 的 `CreationTime` 属性可以获得文件夹的创建时间。2. **文件路径**: 文件夹的完整路径可以通过 `DirectoryInfo` 的 `FullName` 属性获取。1. **文件名**: 文件夹的名称可以通过 `DirectoryInfo` 的 `Name` 属性获取。- **File** 和 **Directory**:提供静态方法来创建、删除和移动文件或文件夹。- **FileInfo**:用于获取文件的相关信息。
2024-10-11 12:00:25 608
原创 C#中的排除法解决问题
在编程领域,尤其是在 C# 中,排除法可以被用来解决各种问题,如查找特定元素、解决数学难题、优化算法等。排除法在 C# 中是一个强大的工具,能够帮助开发者解决各种类型的问题。通过枚举可能的解并逐步排除不符合条件的项,可以有效找到目标解。无论是在数据结构的处理,还是在算法的优化上,深入理解排除法的应用都将助力于程序员在编程道路上的成就。排除法的核心思想是从一组可能的解决方案中逐渐排除不合适的选项,直到找到符合条件的解。问题的解的范围可枚举:解可以是有限或可先验确定的集合中的元素。// 排除不匹配的项。
2024-09-27 10:14:39 340
原创 C#和数据类型转换
在这个例子中,`double`类型的变量`a`被显式转换为`int`类型的变量`b`。在这个例子中,`int`类型的变量`a`被隐式转换为`double`类型的变量`b`。由于`double`类型的范围大于`int`类型,因此这种转换是安全的。在这个例子中,字符`'A'`的Unicode码值是65,转换为16进制后是`41`。`ToString("X")`方法用于将整数转换为16进制字符串。使用`Parse`和`ToString`方法进行字符串与数值类型之间的转换,这在处理用户输入和输出时非常有用。
2024-09-02 20:00:00 1974
原创 免费领!系统学习上位机编程的流程与基础教程
上位机C#、运动控制卡、视觉编程在分阶段学习过程中内容都是独立的,而一个项目则将这些内容高度融合,实现从学到用的蜕变。我在项目开发中写了很多关于运动、视觉、数据库、通讯、图形绘制、文件读取等方面的类,有需要的可以联系我分享,也可以提供项目视频供参考。完成以上几个方面的学习和实践,你就可以从事上位机机器视觉与运动控制的项目开发,实现职业进阶。按照我的学习路径学习,可以达到事半功倍的效果。华山编程导师根据当前招聘需求的关键点,原创录制了一套系统的学习流程和基础教程,帮助你从快速入门到掌握上位机编程的技能。
2024-06-25 22:00:00 367
原创 C#标志位的使用
其次,它还可以避免重复播放声音的问题,因为只有在报警声音停止播放后,才能再次触发新的报警事件。最后,它可以提高代码的可靠性,因为我们可以确保声音只播放一次,以免因为重复执行而导致不必要的复杂情况。例如,在报警系统中,我们可以使用多个标志位来表示不同的报警类型或者报警等级。在一个大型的场所中,当出现问题时,如火灾、盗窃等,报警声音会吸引人们的注意力迅速反应。编程语言中,我们可以使用标志位来跟踪报警声音的播放状态。一个简单的方法是使用单个标志位表示报警声音的播放状态,标志位值为。,则表示报警声音正在播放中。
2024-06-18 21:30:00 491
原创 C#学习指南:重要内容与实用技巧
我在学习过程中发现,理解SQL语言和熟悉常见的数据库(如SQL Server、MySQL、SQLite等)的操作,可以极大地提升开发效率。事件的订阅和触发 事件是基于委托的一种机制,学会如何订阅和触发事件,可以帮助你实现更灵活的事件处理逻辑。数据操作 掌握数据的增、删、改、查操作,并学会如何在代码中实现这些操作,可以让你在项目中更加得心应手。委托的定义和使用 理解委托的定义和使用方法,可以让你在需要时灵活地调用不同的方法。数据库连接 理解如何连接不同的数据库,并熟悉连接字符串的配置,是基础中的基础。
2024-05-24 21:00:00 1536
原创 C#视觉检测之数字识别
数字识别的主要难点在于如何将图像中的数字区分出来,并将其转换成相应的数字字符。近年来,随着计算机视觉技术的不断发展和应用,数字识别已经成为了计算机视觉领域中的一个重要分支。可以使用Halcon提供的图像处理函数,例如threshold、erosion、dilation等。可以使用C#提供的图形界面库,例如Windows Forms或WPF,来实现结果显示。通过C#和Halcon的结合使用,可以实现图像处理和识别等功能。在对图像进行处理之后,可以使用Halcon提供的OCR函数进行数字识别。
2024-04-28 20:00:00 680
原创 上位机编程入门:基本概念和工作原理
本文将介绍上位机编程的基本概念、工作原理以及常见的应用场景,帮助初学者建立起对上位机编程的初步了解。上位机编程是指利用特定的软件工具,对上位机系统进行编程设计,实现对生产过程的监控、数据采集和控制。:上位机通过与传感器、仪表等设备的通信,采集生产过程中的各种数据,包括温度、压力、流量等各种参数。:上位机对采集到的数据进行处理和分析,包括数据的过滤、计算、转换等,以便后续的显示和控制。:根据预先设定的逻辑和规则,上位机对生产过程进行控制,调整设备参数,实现自动化控制和优化。常见的上位机编程工具和语言。
2024-04-18 09:20:05 1318
原创 实际案例分享:如何利用上位机优化生产过程
通过上述案例分析,我们可以看到上位机系统在生产过程优化中的重要作用和实际应用效果。然而,要实现良好的效果,企业需要在需求分析、系统设计、数据分析等方面进行认真的考虑和规划,并与上位机供应商密切合作,共同推动生产过程的持续改进和优化。
2024-04-18 09:19:41 542
原创 如何使用上位机监控和控制设备
通过上述步骤和注意事项,我们可以更好地使用上位机来监控和控制设备,实现生产过程的自动化和优化。上位机的应用不仅可以提高生产效率和灵活性,还可以降低人力成本、减少人为错误,为企业的可持续发展提供有力支持。
2024-04-17 09:00:00 732
原创 什么是上位机?入门指南
它通常与传感器、执行器和其他自动化设备一起工作,以实时地监视过程状态、收集数据,并在需要时进行控制操作。上位机是现代工业自动化中不可或缺的一部分,它通过实时监视、数据采集和远程控制等功能,提高了工业过程的效率、安全性和可靠性。:上位机负责从传感器、仪表和其他设备中采集数据,并将其存储在数据库或历史记录中,以供分析和回放。:当设备状态异常或达到预定的阈值时,上位机可以发出警报并通知操作人员,以便他们采取适当的措施。:在需要时,上位机可以通过网络远程控制设备,例如调整参数、开关设备或执行其他操作。
2024-04-16 21:30:00 3379
原创 C#关于 InputSimulator的用法
通过仅仅几行代码,我们就能够完成各种复杂的模拟输入操作,这使得它成为 C# 开发人员不可或缺的利器之一。通过简单的几行代码,我们就能够完成各种复杂的模拟输入操作,极大地提高了开发效率并且扩展了软件的应用领域。比如,可以将其与 UI 自动化测试框架(如Selenium、Appium等)结合使用,实现更复杂的用户操作模拟和自动化测试场景。InputSimulator 是一个 C# 库,它提供了模拟键盘和鼠标输入的功能,可以方便地在代码中模拟用户的键盘按键和鼠标操作。
2024-04-11 20:00:00 685
原创 C#图形基础,你知道多少?
通过使用C#编程语言和各种图形库,开发人员可以实现丰富多样的图形效果,并与用户进行实时交互。通过使用Xamarin等跨平台开发工具,开发人员可以使用C#来编写iOS和Android应用程序,并结合各种图形库来实现丰富多样的图形交互效果。在这种应用中,开发人员可以使用C#代码来创建窗体和控件,并使用图形库来绘制各种图形元素,如线条、形状和图像。通过与用户的交互,可以实现用户输入和操作对图形的影响,从而实现动态的图形效果。通过合理地组织和优化代码,可以实现流畅的图形交互效果,确保应用程序的性能表现。
2024-03-27 20:30:00 321
原创 C#文件交互
1. 文件读取和写入:在C#中,可以使用FileStream、StreamReader和StreamWriter等类来进行文件的读取和写入操作。下面将介绍C#中文件交互的一些重要方面。3. 文件夹和目录操作:除了对单个文件的操作外,C#还提供了Directory和DirectoryInfo类来进行对目录(文件夹)的操作,包括创建、删除、移动和遍历目录等功能。6. 文件流操作:C#中的FileStream类提供了对文件数据进行读取和写入的能力,可以实现对文件的二进制数据进行处理,比如复制、移动、查找等操作。
2024-03-14 19:00:00 436
原创 一文看懂 | 机器视觉前景
与其他先进技术如物联网、大数据等的融合,将为机器视觉开辟更广阔的应用前景。例如,机器视觉与物联网结合,可以实现智能制造中的物流追踪、产品质量监测等应用,为企业提供全方位的智能化解决方案。然而,这也带来了对工程师的高要求,需要具备深厚的机器视觉和控制系统方面的知识。在全球范围内,中国机器视觉市场逐渐崭露头角,成为国际机器视觉厂商的重要目标。这也表明中国在人工智能领域的发展不仅仅停留在应用层面,而是积极参与到核心技术的创新和产业链的建设中。随着全球制造业的不断升级和转型,机器视觉技术的应用领域也在不断扩大。
2024-03-06 20:00:00 421
原创 C#不可识别的数据库格式解决方法
确保使用的数据库连接字符串与数据库文件的格式匹配。例如,对于Access数据库(.accdb文件),使用OLEDB提供程序可能是一种常见的选择。如果使用的是Visual Studio调试程序,还要确保数据库文件没有被锁定,因为Visual Studio可能会在调试期间锁定文件。确保程序运行时有足够的权限来访问指定路径下的文件。确保指定的路径和文件名拼写正确,而且文件确实存在于指定的位置。如果可能,尝试使用相对于应用程序目录的路径,而不是绝对路径。上位机电气自动化plc编程全套入门教程+工具。
2024-03-05 22:30:00 929
原创 C# 不可识别数据库格式问题
可以尝试使用数据库管理工具(比如Access自带的修复工具)对数据库文件进行修复,或者尝试连接其他已知可用的数据库文件进行测试。5. 使用正确的连接字符串:在连接数据库时,需要使用正确的连接字符串来指定数据库文件的位置、类型和其他必要信息。总之,当遇到C#中不可识别的数据库格式错误时,重要的是要仔细检查并排除各种可能导致问题的原因,并采取适当的措施来解决问题,以确保应用程序能够顺利地连接和操作数据库。总之,当遇到数据库格式不可识别的错误时,首先需要仔细检查错误消息,确定出现错误的具体位置和原因。
2024-03-04 21:00:00 1022
原创 C#在设备数据采集中的应用
设备数据采集是指通过传感器、仪器和其他设备,将设备产生的各种数据进行实时、准确的采集和记录。通过对这些数据的采集和分析,可以帮助企业实现设备的智能监控、预测性维护等目标,提高生产效率和产品质量,降低生产成本。总之,C#语言在设备数据采集中具有广泛的应用前景。通过C#语言强大的数据处理能力、丰富的类库支持以及与各种硬件、软件系统的兼容性,可以帮助企业实现设备数据的高效采集、实时处理和分析。比如,可以通过串口通讯、以太网通讯、Modbus协议等方式与PLC、传感器等设备进行连接,实现对设备数据的实时采集。
2024-02-09 21:00:00 1245
原创 C# 中的 out 参数传递
C# 中的 out 参数是一种强大的特性,它允许方法修改参数的值并将这些更改反映到调用方。在 C# 中,out 参数是一种特殊类型的方法参数,它允许方法在返回之前修改参数的值。但是,当使用 out 参数时,方法可以修改参数的值,并且这些更改会反映到调用方。因为在离开方法之前,必须对 out 参数进行赋值,所以确保方法中对 out 参数的赋值是很重要的。最后,在命名 out 参数时应该遵循良好的命名规范,以便清晰地表达参数的用途和含义。在调用该方法时,需要使用 `out` 关键字来指示参数是输出参数。
2024-02-07 20:30:00 1200
原创 C#中dll引用常见错误
然而,在引用这些dll文件的过程中,有时候会遇到一些问题,比如上面提到的错误信息:“未能加载文件或程序集“System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。有时候,配置文件中可能会存在错误的路径或者错误的配置信息,导致程序无法找到所需的dll文件。如果确认所需的dll文件存在,并且版本和依赖项都匹配要求,但仍然无法解决问题,那么我们可以尝试更新所需的dll文件和其依赖项。
2024-02-05 21:00:00 1558 2
原创 C#读取和保存INI文件配置
在C#应用程序中,读取和保存配置文件是常见的任务,而INI文件是一种轻量级的配置文件格式。在以下代码中,我们将探讨如何使用C#创建一个窗体应用程序,并通过读取和保存INI文件配置来实现一些基本的功能。
2024-02-03 00:00:00 1088
原创 上位机是什么?与下位机是什么关系
首先,上位机是一种用于工业控制系统的软件应用,通常与下位机(例如PLC、仪表等)配合使用,构成了一个完整的工业自动化系统。上位机的主要功能是监视、控制和优化工业过程,通过实时数据采集和分析,实现对生产线的高效管理。通过与物联网(IoT)技术的结合,上位机能够实现设备之间的信息共享,形成高度互联的智能生产网络。总的来说,上位机作为工业自动化领域的关键技术,通过数据的采集、处理和分析,实现对工业过程的全面监控和优化。对于工业界而言,深入了解上位机的概念和功能,将有助于更好地把握工业智能的未来发展趋势。
2024-02-01 20:00:00 1102
原创 C#进程间消息传递
因此,如果一个应用程序需要发送数据给另一个应用程序,或者需要接收另一个应用程序发送过来的数据,就需要进行进程间消息传递。在开发Windows应用程序时,有时需要进行进程间通信,以实现不同进程之间的数据传递和交互。不同的通信方式对系统资源的消耗是不同的,开发者需要根据具体情况选择合适的通信方式。通过创建一个命名管道,并将其连接到需要通信的两个进程,就可以实现这两个进程之间的消息传递。这些方式都可以实现不同进程之间的消息传递和通信,开发者可以根据具体的需求和场景选择合适的方法来进行进程间消息传递。
2024-01-21 21:00:00 713
原创 从设备维修到机器视觉:我的职业发展之路
通过参加一个PLC培训,我掌握了PLC的梯形图编程,并发现那些擅长编写ABCD代码的人在薪资方面远远领先于我。为了进一步提升自己,我决定学习C语言。学习过程中,我发现朱老师的培训非常针对性,而且学习后的成长速度也非常快。我深感机器视觉和上位机编程的重要性,特别是在提高设备运作效率、数据存储和网络数据上传等方面,相较于传统的PLC编程更为灵活和高效。我想强调的是,学习不是一蹴而就的过程,而是需要不断突破自己的过程。我决定学习这个方向,因为我认为要在自动化行业有所作为,学习C#是关键,于是报名参加学习。
2024-01-21 12:00:00 412
原创 C#out参数传递
C# 中的 out 参数是一种强大的特性,它允许方法修改参数的值并将这些更改反映到调用方。然而,在使用时需要注意一些最佳实践,以确保代码的清晰和健壮。在 C# 中,out 参数是一种特殊类型的方法参数,它允许方法在返回之前修改参数的值。但是,当使用 out 参数时,方法可以修改参数的值,并且这些更改会反映到调用方。因为在离开方法之前,必须对 out 参数进行赋值,所以确保方法中对 out 参数的赋值是很重要的。最后,在命名 out 参数时应该遵循良好的命名规范,以便清晰地表达参数的用途和含义。
2024-01-20 09:45:00 728
原创 C#中Git的使用
总之,在C#开发中,Git是一个非常重要的工具,它可以帮助我们更好地进行版本控制和团队协作。通过本文的介绍和样例,相信读者已经对在C#中使用Git有了一定的了解,并且可以开始在自己的项目中应用Git进行版本管理了。现在我们已经将项目添加到了本地Git仓库中,接下来我们可以将它推送到远程仓库中。接下来,我们可以将所有文件添加到暂存区中,并提交到本地仓库。这样就将本地仓库推送到了远程仓库中,并且设置了默认的远程分支为master。这样就将修改后的文件提交到了本地仓库,并且推送到了远程仓库中。
2024-01-19 20:45:00 908
原创 销售转行上位机编程:我的学习与职业经历分享
我曾有一个项目在深圳,虽然已经完成了大半,但由于理念不合和团队手头事务较多的原因,客户多次找回我,市场上的需求还是非常旺盛的。通过时间的推移,我们项目越来越完善,例如多元切换等功能的集成,翻译接口的快速对接,都省去了很多时间。值得一提的是,我们并不需要庞大的实体团队,只需一台电脑就能完成工作,从创业的角度来说,成本非常低,而就业来说,收入也是相当可观的,甚至有些同行年薪达到20多万或30多万。
2023-12-30 22:00:00 531
原创 C#中创建包含括号的数据表字段的处理方法
在C#中创建数据表时,如果需要在字段名称中包含括号,可以使用反引号或者方括号将字段名称括起来。此外,还可以考虑使用别名、数据库脚本处理、数据库迁移工具、正则表达式替换等方法来处理包含括号的字段。如果在数据库中创建数据表时需要使用包含括号的字段名称,可以在数据库脚本中进行处理。根据数据库的不同,可以使用不同的语法来处理包含括号的字段。如果已经存在包含括号的字段,并且需要进行批量处理,可以使用正则表达式替换来修改字段名称。如果字段名称中包含括号,但又不希望在代码中一直使用括号来引用字段,可以考虑使用别名。
2023-12-28 19:30:00 907
原创 建议收藏!上位机编程学习经验分享
在网上看到朱老师的课程,经过多方面了解,决定报名线上全套课程,后来由于线上自制力不够,效果甚微,我决定线下学习,经过三个月系统学习,我成功获得了一份令人满意的offer。我们学到的知识一定要记笔记,老师上课的内容都是重点,不要吝啬记录,不要以为懂了就不需要记了,不要低估笔记的价值。当我们写代码时,如果你记得有一段代码可以解决特定问题但忘了它的名字,你可以打开笔记,用你自己起的关键词来查找,不要浪费时间,代码就能迅速找到。另外,重要的是要及时更新之前的笔记,对其进行修订,以使它们成为你自己的知识。
2023-12-27 20:00:00 1035
原创 C#特性(Attribute)
但是,如果我们在编译时定义了"DEBUG"条件编译符号(例如通过在项目属性中启用调试模式),那么调用将会被编译器包含,并且在运行时输出"这是调试方法"。.通过使用特性,我们可以改变程序的行为,优化性能,验证输入和输出,增加可读性和可维护性,并实现自定义的行为和扩展。在编写C#代码时,我们应该充分利用特性的功能,并根据需要创建自定义特性来满足特定的需求。在上面的示例中,我们定义了一个名为`DebugMethod`的私有方法,并使用`[Conditional("DEBUG")]`特性标记它。
2023-11-18 22:00:00 436
原创 TCP-Modbus通信过程解析与实例演示
在演示过程中,我们展示了如何连续读取和写入多个数据,并通过数据监控界面实时验证操作的结果。不仅如此,我们还说明了如何同时写入多个值,比如在D区写入一组数据,并通过程序读取验证。这里只是一个简单的演示,实际应用中可能会涉及更多的功能和复杂的数据交互。通过这个界面,我们能够监控信号状态和实时数据。确保在同一个网段下,连接成功后,我们可以进行数据监控。通信是一种高效的方式,通过它,我们可以轻松实现与。程序,并使用相关的类库,我们能够更加灵活地操作。我们的电脑作为客户端,通过这个。PLC的连接和数据的读写。
2023-11-17 18:00:00 1441
原创 华山编程培训中心——工业相机飞拍
位置比较触发拍照:在飞拍系统中,通常会使用位置比较器来监测运动物体的位置。这确保了图像的采集与物体的位置同步。全局快门相机:飞拍要求相机能够进行动态取像,这通常需要选择具备全局快门(也称为全局曝光)功能的相机。这些函数在相机完成拍摄后触发,以将拍摄的图像输出到特定的位置或进行后续的处理。外触发拍照的IO接线:飞拍系统通常需要能够外部触发拍照操作,这通常通过相机上的输入/输出(IO)接口实现。飞拍功能是一种高速运动图像采集技术,通过降低相机的曝光时间来拍摄快速移动的对象,以提高工作效率和加快生产速度。
2023-11-02 19:00:00 494
原创 C#反射的应用及相关代码示例
反射为开发人员提供了更大的灵活性和扩展性,使得我们可以在运行时动态地获取类型信息、创建对象实例、访问属性和方法等。在C#编程中,反射是一种强大的工具,它允许程序在运行时动态地获取类型信息、访问和操作类成员。通过反射,我们可以在运行时动态地创建代理类,并拦截被代理类的方法调用。我们可以定义一个接口,并通过反射来加载实现了该接口的外部程序集,并调用其中的方法。通过读取配置文件中的类型信息,我们可以在运行时动态地创建对象,并根据配置文件中的属性值进行初始化。通过反射,我们可以获取被测试类的私有成员,并进行测试。
2023-10-19 11:42:26 208
原创 小白必看!上位机控制单片机原理
首先,你可以把以上位机想象成一台超级聪明的电脑,就像你用来上网、玩游戏、写文档的那台电脑。就像这个可爱的机器人图标,我们可以用以上位机的命令,让它跳舞、转圈圈,甚至是做其他有趣的动作。接下来是最酷的部分!以上位机可以像通过电脑控制屏幕上的游戏角色一样,控制单片机上的事物。以上位机就像你的“大脑”,你可以告诉它想让单片机做什么,然后以上位机会发送指令给单片机。现在,以上位机通过一根连接线与单片机相连,就像电脑和显示器之间的连接线一样。然后,单片机就会听从以上位机的指令,像一个小机器人一样,执行这些任务。
2023-10-07 20:45:00 369
原创 掌握异形插件机系统零件孔位标定的必备视觉定位技巧!
因此,在加工过程中,我们需要首先校正PCB板上的孔位,以便使零件的银角能够更好地对准孔位进行插件。例如,对于两排孔或三列孔,我们可以通过旋转和调整孔位的大小,使用不同的标定点来准确标定零件的位置。通过旋转角度,我们可以生成与偏差孔位对应的孔的位置,然后将零件插入正确的位置。当我们需要插件零件时,我们可以使用这些坐标来指导插件机的运动,确保零件的银角准确对准PCB板上的孔位。通过这种视觉定位和校正坐标的方法,我们可以轻松地标定各种形状和尺寸的零件,确保它们准确插入PCB板的孔位中。我是华山自控编程的朱老师。
2023-10-07 12:30:00 333
原创 C#和Excel文件的读写交互
它使开发人员能够轻松地读取和写入Excel中的数据,灵活地处理和分析数据。无论是进行数据的导入、导出,还是进行数据分析和报告生成,C#和Excel交都能为我们提供强大的工具和技术支持。通过这些库,我们可以创建新的Excel文件,或者打开现有的文件,并将数据写入到指定的单元格中。我们可以宏来自动化Excel文件的操作,比如自动创建图表、进行数据的透视和过滤,以及执行其他复杂的数据处理任务。C#作为一种现代的面向编程语言,提供了丰富的库和功能,使开发人员能够轻松地处理Excel文件,并进行数据的读取和写入。
2023-10-06 20:00:00 427
原创 学员自述:上位机编程培训经历
视觉部分对于没接触过的人是感觉很晦涩的,但也是从基础到扩展一一的详细讲解,深入研究,无论是对halcon软件的练习还是导入到VS里面,匹配定位的几种方式,图像处理的各种算子,算子里面重要参数都代表什么,测量的几种方式,还有字符二维码的识别都有讲解,而且重要的匹配部分还带着进行反复的练习,也让我对视觉这块的技能掌握从当初的无从下手到后来的熟练掌握
2023-10-06 14:53:36 157
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人