排一次开发C#遇到的坑,同时说一下自己对C#中文件夹构建方式的体会。

一个开发Java的人留下了痛苦的泪水,变量命名规则不一样,连括号打的都不一样,?

C#中的解决方案<>Java中的项目

C#中的项目<>Java中的包

本篇文章如有不对的地方,欢迎在评论下方留言,或者私信博主。毕竟第一次开发C#,自己都有点懵逼/(ㄒoㄒ)/~~。

C#WPF线程更新控件

在数据进行更新的页面交互中,我们肯定会将数据更新的函数逻辑放到线程中去,因为数据请求是一个耗时的操作,相信没有谁愿意让自己的页面隔一段时间卡一下。But,如果我们直接在线程中对控件进行修改,会出现这样一个错误

为什么呢?

因为在C#中,非UI线程是不能修改UI控件的。那么如果我们一定要修改控件应该怎么办呢?很简单,将UI修改的函数交给UI线程去做就行了。

this.Dispatcher.BeginInvoke(new Action(()=>change()));// change()代表控件修改的函数

C#进行数据绑定,数据更新成功,但是控件更新失败

TextBlock控件进行绑定的代码如下:

// 创建一个TextBlock控件
TextBlock block = new TextBlock();
// 对象字典
private Dictionary<string,SensorDataDao> controllerDataDictionary = new Dictionary<string, SensorDataDao>();
// 进行数据绑定
BindingOperations.SetBinding(block, TextBlock.TextProperty, new Binding()
{// controllerDataDictionary[tagApi]为绑定的对象Source = controllerDataDictionary[tagApi], // 被绑定对象的属性Path = new PropertyPath("Name"),// 绑定的方式Mode = BindingMode.TwoWay,
});

绑定对象的类:

刚开始我创建类的时候,我忘记继承INotifyPropertyChanged这个类了,如果我们不继承这个类,数据绑定不会失败,也就是说,TextBlock的Text内容仍然会显示,但是你进行改变的时候,Text内容并不会进行改变。

using System;
using System.ComponentModel;namespace DataDao
{public class SensorDataDao:INotifyPropertyChanged{private string _Name;public string Name{set{if (value == _Name) return;_Name = value;Notify("Name");}get => _Name;}public event PropertyChangedEventHandler PropertyChanged;public void Notify(string propertyName){if (PropertyChanged != null){this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));}}}
}

接下来就是我遇到的问题,当我进行wpf 数据绑定的时候,PropertyChanged一直为空,而TextBlock的Text内容也没发生改变,可是我的数据已经改变了(不得不说Visual studio debug模式真香)。

我的数据进行该改变的函数是这样的:

controllerDataDictionary[ApiTag] = new SensorDataDao
{Name = "新的名字",
};

本来我觉得没什么问题的,当是冥冥中,我突然想到,为什么控件进行数据绑定后,会随着数据发生改变呢?是不是因为控件绑定的是对象的内存地址呢(以上是我猜测的,不确定对不对)?可是在上面的更改中,我们可以明显的知道,我们进行数据更新是创造了一个新的对象,并不是原先的对象,所以TextBlock绑定的还是原先的对象,值并没有进行改变。

所以我们需要这样做:

controllerDataDictionary[ApiTag].Name = "新的名字";

这个控件进行绑定的对象就进行修改了。

DataGrid值不进行更新

在上一步我们说了绑定的内容,但是在DataGrid控件中,仿佛就不生效了,即使DataGrid绑定了内容,内容在线程数据进行更新,但是显示的数据却并没有进行更新。真的是我有橘麻麦皮不知当桨不当桨。

直接给解决方法了:

 // 在线程中刷新数据,其中dataGrid为DataGrid的控件名字
dataGrid.Dispatcher.BeginInvoke(new Action(() => dataGrid.Items.Refresh()));

可视化工具连接不上数据库

因为我一直用的是linux进行开发,所以这一次用windows开发的时候遇到了数据连接的问题。

在我安装好mysql后,使用命令行能够进去,如下图所示:

当是,一旦我使用数据库可视化工具,进行数据库连接就出现了以下的问题:(我使用的是DataGrip可视化工具,不确定其他数据库可视化工具会不会遇到这个坑),然后发现死活连接不上。

后面google了一下:发现我们的URL需要这样连接

jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

这样的话,我们就可以开开心心的使用数据库可视化工具了。

这篇博客持续更新,慢慢的排C#开发的坑吧。

转载于:https://www.cnblogs.com/xiaohuiduan/p/11284952.html

初次见面C#排坑记录相关推荐

  1. Java基于springmvc实现文档预览(openoffice+swftools+flexpaper)(排坑记录)

    Java基于springmvc实现文档预览(openoffice+swftools+flexpaper)(排坑记录) 本文代码来源已在末尾标注,写本文的目的在于记录自己在实践过程中遇到的问题及解决方案 ...

  2. linux 使用ssr客户端_webpack5.0+SSR尝鲜【排坑记录】

    webpack5.0+Vue+SSR+vue-router+vuex 一些包 webpack相关 webpack webpack-cli 命令行解析工具 4.0之前是一起的 4.0之后拆开了 需要安装 ...

  3. avue 使用 avue-plugin-ueditor 编辑器的排坑记录

    一.与 avue-crud 结合使用 注意:此处引入 AvueUeditor 即可,无需注册等 使用: params 中的值作为图片上传的参数等 options 的值如下:上图中的params在另一项 ...

  4. 通过abp官方自助创建的项目排坑记录

    1.自动生成项目后迁移数据库如果遇到max key length is 767 bytes mysql5.6下用如下脚本解决不了问题 set global innodb_file_format = B ...

  5. freeswitch1.10.7 安装部署排坑

    这里写目录标题 环境 背景 部署&排坑记录 安装sofia-sip和spandsp 安装freeswitch_1.10.7 mod_verto.c:46:16: fatal error: ks ...

  6. Nvidia Jetson TX2 详细刷机教程及踩坑记录(Jetpack3.3,python2.7,torch1.2,torchvision0.2.2)

    本文总结了自带系统安装cuda等深度学习环境和使用jetpack3.3刷机的步骤,虽然自己的代码没用上,但有需要的人可以参考一下. PS:Jetpack4.5的刷机教程请移步另一篇文章: xyl-50 ...

  7. LinkedIn Camus实践及踩坑记录

    LinkedIn Camus踩坑记录 首先,介绍下Camus吧. 由LinkedIn公司开发的消息队列同步框架,提供将Kafka(一种消息队列框架)的数据装载到Hadoop分布式文件系统(HDFS)的 ...

  8. 直流无刷电机调试排坑指南(铭朗电机驱动器,CAN调试,RS-232调试)

    直流无刷电机调试排坑指南(铭朗电机驱动器) 前言 调试设备 调试思路 调试过程 连接CAN分析仪 上位机安装.驱动安装 创芯科技CAN分析仪 对应的上位机与驱动 周立功CAN分析仪 对应的上位机与驱动 ...

  9. 华为平板安装python_教你用树莓派安装集成docker版openwrt、homeassistant等及一些排坑指南...

    教你用树莓派安装集成docker版openwrt.homeassistant等及一些排坑指南 2020-04-30 18:45:28 30点赞 290收藏 23评论 小编注:此篇文章来自即可瓜分10万 ...

最新文章

  1. 记录Mask RCNN调整预测网格 font大小
  2. Windows10上使用VS2017编译MXNet源码操作步骤(C++)
  3. HJ14 字符串排序
  4. ubuntu安装搜狗输入法-全面版
  5. python 写txt 换行_python中写入txt文件需要换行,以及\r 和\n
  6. 央行无意放宽松,7月贷款仍有可能吃紧
  7. 妙用世界之窗浏览器的隐私保护功能
  8. 关于LD_PRELOAD在Android API HOOK中的应用
  9. 如日中天的Uber到底是用什么开发语言做到的?
  10. VC++可视化编程——创建空白窗口
  11. 百万调音师—AU效果器基本应用
  12. 9.mysql SQL面试题
  13. TODA项目Part1—后端项目设置与连接数据库
  14. 5G步入规模化商用关键期
  15. 字符数组 - 数组名
  16. 树莓派/图像/人脸识别
  17. Python的Pexpect详解
  18. 分布式数据库:如何正确选择分片键?
  19. php中foreach 循环null,php中foreach循环问题
  20. 逗号算命系统 v1.02

热门文章

  1. 平台如何限制ip流量_社区团购平台如何通过地推获得更多流量?
  2. dllregisterserver找不到入口点_厨房间漏水找不到漏水点,厨房上面漏水 | 影楼
  3. 计算机骗局案例,骗局揭秘 | 卖你一台假电脑,再送你一个假鲁大师
  4. oracle存储过程和视图不存在,Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题...
  5. 什么是pdi检测_为什么国人买车钟爱白色?这几点购车陷阱不要踩
  6. win7程序员御用主题包制作
  7. [Intellij] Project Structure 配置说明
  8. Commons IO -- IOUtils
  9. 数据库下午怎么插入_数据库中日期时间用法
  10. python下int转日期_减去不同格式的日期并转换为Int - python