01 2021 档案
摘要:1.托管与非托管的区别 2.非托管类的实现 第一步:创建C++空项目(命名Caculate)添加一个类AddOperate 第二步:将C++代码编译成动态库dll 第三步:将dll拷贝到c#项目输入目录,一般在bin/debug下面 第四步:C#调用dll 3.托管类的实现 第一步:打开vs2019
阅读全文
摘要:C#中资源分为托管资源和非托管资源。 托管资源由垃圾回收器控制如何释放,不需要程序员过多的考虑(当然也程序员也可以自己释放)。 非托管资源需要自己编写代码来释放。那么编写好的释放非托管资源的代码(释非代码)由谁来调用呢。有两种实现方式: 一 将释非代码放到构造函数析构函数中,由系统自动调用,系统会在
阅读全文
摘要:实际应用中多个线程往往需要共享数据,因此必须使用同步技术,确保一次只有一个线程访问和改变共享数据。同步又分为进程内部线程的同步以及进程之间线程的同步。 进程内部线程同步: 1. lock : 使用比较简单 lock(obj){ Synchronize part }; 只能传递对象,无法设置等待超时;
阅读全文
摘要:在网上也看过一些关于线程同步的文章,其实线程同步有好几种方法,下面我就简单的做一下归纳。 一、volatile关键字 volatile是最简单的一种同步方法,当然简单是要付出代价的。它只能在变量一级做同步,volatile的含义就是告诉处理器, 不要将我放入工作内存, 请直接在主存操作我。(【转自w
阅读全文
摘要:核心类:Semaphore,通过int数值来控制线程个数。 * 通过观察构造函数 public Semaphore(int initialCount, int maximumCount);: * initialCount: 可以同时授予的信号量的初始请求数。 * maximumCount: 可以同时
阅读全文
摘要:Win32知识之窗口本质 一丶摘要 在学习Win32的时候. 很多操作都是窗口进行操作的.那么今天就说一下窗口的本质是什么. 窗口的本质是不断绘制.是windows通过消息机制进行绘制的. 我们知道.内存分为高低2G 低2G是给应用程序使用的. 高2G是给操作系统使用的.而我们画图形的操作都是操作系
阅读全文
摘要:系统1:ThinkPad T570、Windows10、QT5.12.2(Qt Creater 4.8.2)一、动态库.dll的创建和调用1.在qtcreater中按如下步骤创建动态库,动态库名为mydll: 选择Library项目,C++库选择共享库:选择qt自带的kit:在工程中自动生成的myd
阅读全文
摘要:什么是库文件? 库文件是事先编译好的方法的合集。比如:我们提前写好一些数据公式的实现,将其打包成库文件,以后使用只需要库文件就可以,不需要重新编写。 Linux系统中: 1.静态库的扩展名为.a;2.动态库的扩展名为.so; 源代码到可执行程序的转换时需要经历如下图所示的过程: 1.编译是指把用高级
阅读全文
摘要:Semaphore是System.Threading下的类,限制可同时访问某一资源或资源池的线程数。 常用构造方法 https://msdn.microsoft.com/zh-cn/library/e1hct27h(v=vs.110).aspx public Semaphore( int initi
阅读全文
摘要:虽然以前我很怕git冲突,包括以前的版本控制器SVN上的冲突,但是昨天我决定好好的面对它,不去怕它,下面是我的解决过程。。。 话说一天的早上,我和同事(称为A)都同步了网络上的代码,然而A在中途提交了一次,并且合并到主分支master上了,更巧的是提交的那个文件是我现在也修改了的,然后等我晚上提交r
阅读全文
摘要:强制类型转换 1. static_cast 2. dynamic_cast 3. const_cast 4. reinterpret_cast 5. 为什么要需要四种类型转换? 1. static_cast 实现C++种内置基本数据类型之间的相互转换,不能用于两个不相关类型进行转换。 例如:将整形数
阅读全文
摘要:1.编写一个程序判断一个变量是不是指针? 拾遗-C++中仍然支持C语言中的可变参数函数-C++编译器的匹配调用优先级1.重载函数2.函数模板3.变参函数 #include <iostream> #include <string> using namespace std; class Test { p
阅读全文
摘要:类型识别 C++中如何得到动态类型? #include <iostream> #include <string> using namespace std; class Base { public: virtual string type() { return "Base"; } }; class D
阅读全文
摘要:C++中的异常处理(下) array.h #ifndef _ARRAY_H_ #define _ARRAY_H_ #include <stdexcept> using namespace std; template < typename T, int N > class Array { T m_ar
阅读全文
摘要:C++中的异常处理(中) 为什么要在catch中重新抛出异常? #include <iostream> #include <string> using namespace std; void Demo() { try { try { throw 'c'; } catch(int i) { cout
阅读全文
摘要:C++内置了异常处理的语法元素try... catch ...-try语句处理正常代码逻辑-catch语句处理异常情况-try语句中的异常由对应的catch语句处理 try { double r = divide(1,0); } catch(...) { cout << "Divided by ze
阅读全文
摘要:异常的概念-程序在运行过程中可能产生异常-异常(Exception)与Bug的区别 异常是程序运行时可预料的执行分支 Bug是程序中的错误,是不被预期的运行方式 异常(Exception)和Bug的对比-异常 运行时产生除0的情况 需要打开的外部文件不存在 数组访问时越界-Bug 使用野指针 堆数组
阅读全文
摘要:单例模式需求的提出在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在(Single Instance)如何定义一个类,使得这个类最多只能创建一个对象?明确创建一个对象,必然会调用构造函数。要控制类的对象数目,必须对外隐藏构造函数 思路:-将构造函数的访问属性设置为private-定义in
阅读全文
摘要:Qt中的智能指针-QPointer .当其指向的对象被销毁时,它会被自动置空 .析构时不会自动销毁所指向的对象-QSharedPointer .引用计数型智能指针 .可以被自由的拷贝和赋值 .当引用计数为0时才删除指向的对象 #include <QPointer> #include <QDebug>
阅读全文
摘要:智能指针类模板智能指针本质上就是一个对象,它可以像原生指针那样来使用。 智能指针的意义-现代C++开发库中最重要的类模板之一-C++中自动内存管理的主要手段-能够在很大程度上避开内存相关的问题 1.内存泄露,在测试阶段很难发现。造成的原因就是申请堆空间中的内存,忘记释放。 2.多次指针释放:一个指针
阅读全文
摘要:工具/原料 QT designer 方法/步骤 1 首先创建一个Manwindow窗口 拖一个label到窗口上 把文字去掉,然后把label放大 找到stylesheet一栏 点击右边那个...会弹出来一个窗口,再点击添加资源的下拉框,如图 点击那支笔,会出来个框 点击新建资源文件,如图,保存一下
阅读全文
摘要:本篇博客将深入讨论信号与槽,重点讨论信号与槽的连接方式。信号与槽的连接方式还有什么值得我们注意的地方吗?之前是如何连接信号与槽的呢?通过connect函数将指定的信号连接到指定的槽函数上面,接下来将要发生的事情就是信号一旦被发射,相应的槽函数就会被调用。这是我们最直观的认识。每次调用connect函
阅读全文
摘要:多线程中的信号与槽(下) 可以看到void TestThread::run() end...没有被调用 有趣的问题:如果线程体函数中开启了事件循环,线程如何正确结束?QThread::exec()使得线程进入事件循环-事件循环结束前,exec()后的语句无法执行-quit()和exit()函数用于结
阅读全文
摘要:令人不解的问题: 当槽函数是线程类的成员时,为什么依然不在本线程内被调用执行? 隐藏的问题:对象依附于哪一个线程?对象的依附性与槽函数执行的关系?对象的依附性是否可以改变? 对象依附于哪个线程?默认情况下,对象依附于自身被创建的线程例如:对象在主线程(main()函数)中被创建,则依附于主线程 in
阅读全文
摘要:值得思考的问题: 线程类的信号与槽 实验一: TestThread.h #ifndef TESTTHREAD_H #define TESTTHREAD_H #include <QThread> class TestThread : public QThread { Q_OBJECT protecte
阅读全文
摘要:一个事实 在实际的项目开发中,大多数时候是直接将组件中预定义的信号连接到槽函数,信号发射时槽函数被调用。 深度的思考 信号是怎么来的?又是如何发射的? Qt中信号(SIGNAL)的本质 —信号只是一个特殊的成员函数声明 函数的返回值是void类型 函数只能声明不能定义 —信号必须使用signals关
阅读全文
摘要:信号量的概念 -信号量是特殊的线程锁 -信号量允许N个线程同时访问临界资源 -Qt中直接支持信号量(QSemaphore) 线程锁是用来保护临界资源的,每个线程锁每次只允许一个线程进行访问临界资源。 QSemaphore sem(1)定义了一个信号量,并且N的值为1,意味着一次只允许一个线程去访问临
阅读全文
摘要:问题:程序有多少临界资源?需要多少线程锁? 临界资源是没有任何的限制 一般性原则:每一个临界资源都需要一个线程锁进行保护(一 一对应) 定义了两把线程锁,显然是为了保护两个临界资源而定义的。在线程A中需要两个临界资源才能保证工作,这两个临界资源对应的线程锁就是m1,m2。在线程B中也需要两个临界资源
阅读全文
摘要:值得思考的问题: 多个线程除了在时序上可能产生相互依赖,在其他方面是否也可能产生相互依赖呢? 生产消费者问题:-有n个生产者同时制造产品,并把产品存入仓库中 -有m个消费者同时需要从仓库中取出产品 -规则: 当仓库未满,任意生产者可以存入产品 当仓库未空,任意消费者可以取出产品 编程实验:生产消费者
阅读全文
摘要:多线程间的同步 串行解决方案示例代码: #include <QCoreApplication> #include <QThread> #include <QDebug> #include <QObject> /* sum(n)=> 1 + 2 + 3 + ..... + n sum(1000)= ?
阅读全文
摘要:Qt中的多线程编程 QThread编程示例 class MyThread: public QThread //创建线程类 { protected: void run() //线程入口函数 { for(int i=0; i<5; i++) { qDebug() << objectName() << "
阅读全文
摘要:内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文件,就像操作进程空间里的地址一样了,比如使用c语言的 memcpy等内存操作的函数。这种方法能够很好的应用在需要频繁处理一个文件或者是一个大文件的场合,这种方式处理IO效率比普通IO效率要高 共享内存是内存映射文件的一种特殊
阅读全文
摘要:一、创建DLL 1、建立动态链接库项目 2、创建头文件和源文件 删除 framework.h、dllmain.c 等现有文件(照顾VS2013等低版本),创建新的头文件 Mydll.c Mydll.h Mydll.h头文件代码如下: #include<stdio.h> _declspec(dllex
阅读全文
摘要:用Qt做界面的时候,很多时候都会遇见点击一个按钮弹出一个新的窗口的功能。我在刚开始做这个功能的时候,直接是点击一次按钮就new一个新的窗口,每次都只是将子窗口关闭而已,并没有去释放子窗口的资源,这样就会出现重复点击按钮的话,窗口的资源就会越积越多。 所以在新建一个窗口的时候就可以设置窗口的属性,设置
阅读全文
摘要:定义的接口 #ifndef REGEXPINTERFACE_H #define REGEXPINTERFACE_H #include <QString> class RegExpInterface { public: virtual ~RegExpInterface() { } virtual QS
阅读全文
摘要:创建一个UWP项目 然后创建一个通用C++运行时项目 右键点击C++项目,添加一个C++类 头文件.h #pragma once namespace Test{ public ref class MyMath sealed { public: int add(int a, int b); };} 源
阅读全文
摘要:unique_ptr 不共享它的指针。它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法。只能移动unique_ptr。这意味着,内存资源所有权将转移到另一 unique_ptr,并且原始 unique_ptr 不再拥有此资源。我们建议
阅读全文
摘要:目录 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 1.智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通
阅读全文
摘要:学习笔记第二篇,利用Qt实现选项卡式的页面,效果如图1.1-图1.3所示。程序实现的功能是通过点击状态栏实现不同页面的切换,实际上Qt中自带有Tab选项卡式的控件,本文利用StackWidge实现类似的页面切换功能。本文的开发思路以及页面代码参考了陆文周主编的《Qt5开发及实例(第3版)》(中国工信
阅读全文
摘要:QPointer是一个模板类,为QObject对象提供了守卫指针(Guarded Pointer)。什么是守卫指针?守卫指针QPointer<T>类似于普通C++指针T *,有且仅有一点不同:当被引用的对象被删除的时候,守卫指针自动设置为0,不像普通的C++指针将成为“野指针”。这里,T必须是QOb
阅读全文
摘要:今天突然不能su到root了,root密码是正确的,但是就是显示密码错误还有mount也不能在一般用户里用了,不管有没有设备,都说没有权限到google上搜索了一番,发现了这样一段:---------------------------Try doing (note back-ticks not q
阅读全文
摘要:关于UWP的历史,其起源是Microsoft在Windows 8中引入的Metro apps。(后来又被称作Modern apps, Windows apps, Universal Windows Apps等)无论是从目的还是从效果上看,这一类应用模型都与iOS/Android比较相似,是为了更有利
阅读全文
摘要:using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Windows;using System.Window
阅读全文
摘要:view model using HPControls.Helper; using System; using System.ComponentModel; using System.Threading; using Xiaowei.Models; using Xiaowei.Services; u
阅读全文
摘要:前言 之前一直想一篇这样的东西,因为最初接触时,我也认真看了廖雪峰的教程,但是似乎我觉得讲得有点多,而且还是会给我带来很多多余且重复的操作负担,所以我希望能压缩一下它在我工作中的成本,但是搜索了一下并没有找到满意的教程,新的一年自己梳理一下自己的经验。 可能男生们大神比较多,觉得Git是如此简单,便
阅读全文
摘要:百度搜索下载Git安装,如下图所示: 2 安装步骤省略,直接下一步即可,直至出现下面的图片,说明安装成功,如下图所示: 3 使用git GUI克隆已存在的仓库 在本地新建一个文件夹test,选中后点击右键,选择Git GUI Her,出现下图,选择第二个,克隆已经存在的仓库,如下图所示: 4 填写S
阅读全文
摘要:C#调用C++dll的方法和步骤 其他分享涉及到的概念和方法对于像我这样比较菜的选手看起来比较费劲并且很难抓住重点,这里我总结了一段时间的研究成果供初学者救济之用,简单明了。 工具/原料 VS2008 方法/步骤 新建项目->Visual C++->Win32项目 MyDLL 注意:C++编写的dl
阅读全文
摘要:使用的工具是VS2010哦~其他工具暂时还没试过 我新建的工程名是my21dll,所以会生成2个同名文件。接下来需要改动的只有画横线的部分 下面是my21dll.h里面的。。。 下面的1是自动生成的不用动,或者也可以不要,因为只是一个宏而已下面可以做相应修改。 下面的2是自动生成的类,我没用就注释掉
阅读全文
摘要:在单片机项目开发中,上位机也是一个很重要的部分,主要用于数据显示(波形、温度等)、用户控制(LED,继电器等),下位机(单片机)与 上位机之间要进行数据通信的两种方式都是基于串口的: USB转串口 —— 上位机和下位机通过USB转串口连接线直接相连进行数据交互; 串口转WIFI(ESP8266) —
阅读全文
摘要:Ubuntu缺省情况下,并没有提供C/C++的编译环境,因此还需要手动安装。但是如果单独安装gcc以及g++比较麻烦,幸运的是,Ubuntu提供了一个build-essential软件包。查看该软件包的依赖关系: y@ubuntu:~$ apt-cache depends build-essenti
阅读全文
摘要:1、新建目录:mkdir test 2、进入目录中,新建文件:cd test touch test.sh 3、编写内容:vi test.sh #!/bin/bash echo 'Hello World!' 4、可执行权限 下一步我们要做的事情是让我们的脚本可执行。使用 chmod 命令: chmod
阅读全文
摘要:最早的时候App Service被定义为一种后台服务,类似于极简版的Windows Service。App Service作为Background Task在宿主UWP APP中运行,向其他UWP APP提供服务,可用于UWP APP间通讯及交换数据。 早期的App Service应用场景较为单一,
阅读全文
摘要:async/await是C#5.0中推出的,先上用法: static void Main(string[] args) { Console.WriteLine(" 主线程启动 "); Task<int> task = GetStrLengthAsync(); Console.WriteLine("主
阅读全文
摘要:vs2012 winform 连接摄像头设备,这里需要引入 代码: using AForge; using AForge.Controls; using AForge.Imaging; using AForge.Video; using AForge.Video.DirectShow; 在工具箱中还
阅读全文
摘要:1、Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如: ◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作; ◆ ThreadPool不支持线程执行的先后次序; 以往,如果开发者要实现上述功能,需要完成
阅读全文
摘要:1、Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如: ◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作; ◆ ThreadPool不支持线程执行的先后次序; 以往,如果开发者要实现上述功能,需要完成
阅读全文
摘要:1、键盘钩子: 通过代码将键盘的事件屏蔽掉,达到锁屏的效果。(参考地址:https://zhidao.baidu.com/question/135132386108196965.html) 2、代码如下: public class Hook : IDisposable { public delega
阅读全文
摘要:1. 线程与界面组件需要注意的地方 在QThread线程中不能直接创建QWidget之类的界面组件. 因为在QT中,所有界面组件相关的操作都必须在主线程中(也就是GUI thread) 所以, QThread线程不能直接操作界面组件. 2.QThread线程如何操作界面组件-方法1 将多线程类对象封
阅读全文
摘要:void MainWindow::on_pushButton_clicked() { //模态 QDialog dlg(this); dlg.resize(100,100); dlg.exec(); qDebug()<<"hello world"; //非模态 QDialog *dlg2=new Q
阅读全文
摘要:1, 将图片资源复制到项目文件夹。 1. 鼠标点击工程文件目录右键选择 "添加新文件..." 2. 在模板中选择 Qt-->Qt Resource File 3. 资源名称,不要有中文, 路径默认保持工程目录即可 4. 选中 res.qrc 资源文件鼠标右键选择 "Open in Editor" 打
阅读全文
摘要:C++ 信号处理 信号是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。 有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件
阅读全文
摘要:#include <iostream> class A { public: A(); ~ A(); virtualvoid say() { std::cout << "Hello this is class A!\n"; } static void test() { std::cout << "He
阅读全文
摘要:xml 代码 <Page x:Class="ContentControlWithTemplateSelector.TestPage1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://
阅读全文
摘要:主页面 <Page x:Class="CheckMemoryLeak.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/w
阅读全文
摘要:xml code <Page x:Class="AdaptiveLayout.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.c
阅读全文
摘要:【UWP开发】自定义锁屏&桌面壁纸 mtobeiyf关注 2015.11.01 00:16:55字数 394阅读 1,249 调用通用的API来设置桌面壁纸,可以实现很多有趣的功能。在Windows通用平台中,可以使Windows.System.UserProfile命名空间下的类UserProfi
阅读全文
摘要:记录一下QT5 动态链接库的创建和使用 在文章的最后有完成的代码供下载 1.创建动态链接库 先新建一个库项目 选择chose进入下一下页面,类型选择共享库,输入一个名称:我输入的是sld 再点击下一步到 如果这里我们需要QtGui所以也勾选上了 再点击下一步直到完成 我们在.pro文件里加上 DES
阅读全文
摘要:初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢?看了篇文章,说先要子类化QEvent,然后定义自己的QEvent::Type,然后重写QWidget::event()函数,然后就可以调用QCoreApplication::sendEvent()或者QCoreAp
阅读全文
摘要:一、事件与处理程序在运算过程中发生的一些事情:鼠标单击、键盘的按下...这些的事件的监控与处理在Qt中不是以信号的方式处理的。当这些事件发生时会调用QObject类中的功能函数(虚函数),所有的控件类都继承了这个类。 常用的鼠标事件:void mousePressEvent(QMouseEvent
阅读全文
摘要:事件过滤器 Qt 创建了 QEvent 事件对象之后,会调用 QObject 的 event()函数做事件的分发。有时候,你可能需要在调用 event()函数之前做一些另外的操作,比如,对话框上某些组件可能并不需要响应回车按下的事件,此时,你就需要重新定义组件的 event()函数。如果组件很多,就
阅读全文
摘要:event() 今天要说的是 event()函数。记得之前曾经提到过这个函数,说在事件对象创建完毕后,Qt 将这个事件对象传递给 QObject的 event()函数。event()函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler)。 e
阅读全文
摘要:自定义login 控件 Login头文件 #ifndef LOGIN_H #define LOGIN_H #include <QWidget> namespace Ui { class Login; } class Login : public QWidget { Q_OBJECT public:
阅读全文
摘要:C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。 C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印
阅读全文
摘要:本节内容讲解了什么是对象树以及其所带来的 GUI 编程好处。最后说明了在对象树中析构顺序问题并举了个特殊的例子,来说明平时编程中需要注意的一个点。 什么是对象树? 我们常常听到 QObject 会用对象树来组织管理自己,那什么是对象树? 这个概念非常好理解。因为 QObject 类就有一个私有变量
阅读全文
摘要:由于要将本地程序上传至云服务器中,所以需要给云服务器端安装ftp服务器。记录一下ftp的安装过程,以便以后使用。服务器端所用系统为Ubuntu16.04. 1. 安装ftp服务器, apt-get install vsftpd ftp 2. 配置ftp服务器,在/etc/vsftpd.conf中修改
阅读全文
摘要:(TitleId,DiaplayName,args,LogoUri,size); Obj.VisualElements.ShowNameOnSquare150x150Logo = true; if (await Obj.RequestCreateAsync()) { await new Messag
阅读全文
摘要:xml code <Page x:Class="UWPDemo.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winf
阅读全文
摘要:参考网址: https://blog.csdn.net/q496713258/article/details/6990837 qt 的学习网址: http://c.biancheng.net/view/1792.html 一、建立并生成动态链接库 1 我们首先在磁盘的某个位置建立一个名为DllDem
阅读全文
摘要:async/await是C#5.0中推出的,先上用法: static void Main(string[] args) { Console.WriteLine(" 主线程启动 "); Task<int> task = GetStrLengthAsync(); Console.WriteLine("主
阅读全文
摘要:WPF线程获取UI线程 WPF中只能是UI线程才可以改变UI控件相关,当采用多线程工作时,可用以下代码获取 UI线程进行操作: App.Current.Dispatcher.Invoke((Action)delegate() { //codes }
阅读全文
摘要:为了实现Undo和Redo,必须要在程序中保存起程序的运行状态,从而能够在Undo时跳转到前一个状态和在Redo时跳转到下一个状态。为了实现状态的维护,我采用了两个栈来分别保存Undo操作的状态和Redo操作的状态。 public static Stack<MyCommand> undoStack
阅读全文
摘要:原文地址:http://kb.cnblogs.com/page/116095/ 随着拥有多个硬线程CPU(超线程、双核)的普及,多线程和异步操作等并发程序设计方法也受到了更多的关注和讨论。本文主要是想与园中各位高手一同探讨一下如何使用并发来最大化程序的性能。 多线程和异步操作的异同 多线程和异步操作
阅读全文
摘要:private void initalAlarmHanle() { string cancelAlarm = "CancelAlarmEvent"; ConnectionManager.AddHandler(cancelAlarm, async (v) => { string clockId = "
阅读全文
摘要:Dictionary<string, object> dic = new Dictionary<string, object>(); long lg = 12345; dic["123"] = lg; long ?l = dic["123"]as long?; if(l!=null) { Conso
阅读全文
摘要:xml code <UserControl x:Class="WinTest.HPControl.ReminderTimer" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://sche
阅读全文
摘要:xml code <Page x:Class="MyApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/
阅读全文
摘要:Xml code <Page x:Class="MyApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/
阅读全文
摘要:泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。 您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。
阅读全文
摘要:SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。 排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中
阅读全文
摘要:反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。 您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 优缺点 优点: ·
阅读全文
摘要:xml code <Page x:Class="MyApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/
阅读全文
摘要:xml code <Page x:Class="MyApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/
阅读全文
摘要:C# code 后台任务 public sealed class BgTask : IBackgroundTask { #region 私有字段 SystemMediaTransportControls mdcontrol = null; BackgroundTaskDeferral deferra
阅读全文
摘要:xml code <Page x:Class="MyApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/
阅读全文
摘要:xml <Page x:Class="MyApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/
阅读全文
摘要:xml code <Page x:Class="MyApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/
阅读全文
摘要:xml <Page x:Class="MyApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/
阅读全文
摘要:虽说输入法不是什么新事物,各种语言版本都有,不过在C#不常见;这就会给人一种误会:C#不能做!其实C#能不能做呢,答案是肯定的——三种方式都行:IMM、TSF以及外挂式。IMM这种就是调windows的一些底层api,不过在新版本的windows中基本上已经不能用了,属于一种过时的操作方式。TSF是
阅读全文
摘要:访问image资源 BitmapImage bitmapImage = new BitmapImage(); img.Width = bitmapImage.DecodePixelWidth = 80; //natural px width of image source // don't need
阅读全文
摘要:Toast var t = Windows.UI.Notifications.ToastTemplateType.ToastText02; //在模板添加xml要的标题 var content = Windows.UI.Notifications.ToastNotificationManager.G
阅读全文
摘要:class Program { //写线程将数据写入myData static int myData = 100; //读写次数 const int readWriteCount = 20; //false:初始时没有信号 //static ManualResetEvent autoResetEve
阅读全文
摘要:什么是Mutex “mutex”是术语“互相排斥(mutually exclusive)”的简写形式,也就是互斥量。互斥量跟临界区中提到的Monitor很相似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的
阅读全文
摘要:emaphore是System.Threading下的类,限制可同时访问某一资源或资源池的线程数。 常用构造方法 https://msdn.microsoft.com/zh-cn/library/e1hct27h(v=vs.110).aspx public Semaphore( int initia
阅读全文
摘要:public class SharedData { public int Value { get; set; } } public class Test { async Task ModifyValueAsync(SharedData data) { Console.WriteLine("pre v
阅读全文
摘要:产生冲突原因 产生:多个开发者同时使用或者操作git中的同一个文件,最后在依次提交commit和推送push的时候,第一个操作的是可以正常提交的,而之后的开发者想要执行pull(拉)和pull(推)操作的时候,就会报冲突异常conflict。 解决:保留自己修改的数据,同时保留别人的数据信息;同时p
阅读全文
摘要:tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样 不同的是:git是命令行操作模式,tortoiseGit界面化操作模式,不用记git相关命令就可以直接操作,读者可根据自己情况选择安装 2 TortoiseGit下载 tor
阅读全文

浙公网安备 33010602011771号