随笔分类 - C#
C#语法巩固
摘要:本文主要介绍如何让摄像头预览界面的宽高比始终在16:9。 首先我们需要修改一下上一篇随笔实现的UI界面,让Grid变成一个3*3的九宫格,预览界面位于正中间。Xaml示例代码如下: <Window x:Class="WebcamPreview.MainWindow" xmlns="http://sc
阅读全文
摘要:本文简略地介绍一下如果使用AForge来实现前置/后置摄像头的预览功能。 要使用AForge,就需要添加AForge NuGet相关包的引用,这些包依赖的其他包会自动安装。 AForge.Controls AForge.Video.DirectShow 接下来需要添加另外两个引用,主要是为了使用Vi
阅读全文
摘要:可以使用的Win32 API是:
阅读全文
摘要:最近在搞Ocr相关的windows universal app, 用到了一些图像处理相关的知识。 涉及到了BitmapDecoder/BitmapEncoder/IRandomAccessStream等类,下面总结了IRandomAccessStream的一些扩展方法,以后还会慢慢加上其他常用的。
阅读全文
摘要:最近在做一个PDF电子文档相关的项目,我们的app是运行在Windows 8 / WinRT 下的。由于使用的第三方库的一些技术限制,text area竟然不支持多行文本自动换行。于是我们就需要自己实现自动换行,实现这个功能的关键点就是要知道如何去计算一个字符,一个单词在指定了字体跟字体大小的前提下
阅读全文
摘要:首先定义一个简单类,并重写ToString方法。public class CommidityFilter { public string Property { get; set; } public string Characterist { get; set; } ...
阅读全文
摘要:2013年,即将要过去了。屌丝C#程序员们拿到了年终奖不?是不是又想蠢蠢欲动了?是不是想通过跳槽来为自己实现加薪的梦想?好吧,跳槽之前还是做点准备吧,准备好C#的笔试吧。这里我收集了些奉献给大家,大家还有比较有意思的,也可以拿出来,让大家共同学习下。注:部分题目之后会奉上参考答案。请看题:1:不允许使用循环语句、条件语句,在控制台中打印出1-200这200个数。参考答案:这里我使用的是递归。private static void Print(int number) { Console.WriteLine(number); if (num...
阅读全文
摘要:昨日在写Silverlight程序的时候,遇到一个问题,感觉是Silverlight的Bug。使用版本是Silverlight5。异常信息如下:行: 56错误: Silverlight 应用程序中未处理的错误 代码: 4004 类别: ManagedRuntimeError 消息: System.ArgumentException: 值不在预期的范围内。 位于 System.Windows.Size.set_Width(Double value) 位于 System.Windows.Controls.Primitives.TabPanel.ArrangeHorizon...
阅读全文
摘要:今日,在项目重构的时候忽然想到一个问题,一个类哪些成员的增加,会影响一个类所占内存的大小?C#有没有办法知道一个对象占多少内存呢? 第一个问题:很快想到是类的非静态的字段、属性。 第二个问题:首先想到的是sizeof()。下面开始验证,首先来验证值类型,验证代码如下:int size = sizeof (int); //4个字节注意点:sizeof运算符仅适用于值类型,而不适用于引用类型。sizeof运算符只能在不安全代码块中使用。如下面的代码将无法编译通过:public struct TestStuct { }int size = sizeof(new TestStuct...
阅读全文
摘要:const声明的常量为编译时常量,就是在编译器编译程序时就能够确定值,此后不能改变常量的值readonly声明的常量为运行时常量,就是在运行时确定值,此后不能改变常量的值声明方式不同:1:运行时常量只能定义在类或结构体范围中,编译时常量还可以定义在方法中。2:运行时常量可以是任何类型,编译时常量只能是基本类型(比如 int long等内建整性或浮点型,enum,string)。3:编译时常量只能在初始化的时候赋值,运行时变量还可以在构造函数中赋值。4:不能用new操作符来初始化一个编译时常量,即便它的类型是值类型。(这一点有问题,如代码中演示,可以编译通过)最重要的区别: 编译时的常量性能..
阅读全文
摘要:前几个月,经理说我们部门最近要招几个人,要我出几道面试题,题目的要求是,要考察C#基础,不要太难,不要出问答题,最好是有唯一答案的。因为这份面试题是给人事部的,他们可不懂程序。最后一个要求是,要有一两道题能区分中级程序员与初级程序员。 以前一直都是别人出题考我,现在终于有机会出题考别人,我心里那个激动哇,我就琢磨着出什么题目呢?在网上百度,Google了好一阵。好不容易,想出了10道题,让经理看了一眼。经理的回复是太难了,没有必要弄那么难,题目也太多,出个5道题就差不多了。看看,我们经理多好呀。又过了好一阵子,弄了5道题目。经理在最后还补充了一题。 今日,把题目翻了出来,选择了其...
阅读全文
摘要:近日,在工作的时候遇到要对一个大的List<T>集合进行排序,于是就了解下各种List<T>的排序方法。首先,排序自然就会想到用Sort方法,看看List<T>的Sort方法各个重载版本:public void Sort();public void Sort(Comparison<T> comparison);public void Sort(IComparer<T> comparer);public void Sort(int index, int count, IComparer<T> comparer);1:Sort
阅读全文
摘要:由一个简单的例子来分析多线程的执行,先看看简单的例子,代码如下:class Program { static int count = 0; static void Main(string[] args) { for (int i = 0; i < 10; i++) { Thread t = new Thread(Run); t.Name = i.ToString(); t.Start(); }...
阅读全文
摘要:在.Net中,Join方法主要是用来阻塞调用线程,直到某个线程终止或经过了指定时间为止。Join方法的声明如下: public void Join(); public bool Join(int millisecondsTimeout); public bool Join(TimeSpan timeout);先看一段简单的代码,再来理解Join方法到底是怎么用的,代码如下: static void Main() { var stopwatch = Stopwatch.StartNew(); Thread[] array = new Th...
阅读全文
摘要:在.net中为我们提供了两种启动线程的方式,一种是不带参数的启动方式,另一种是带参数的启动的方式。1:不带参数的启动方式,可以使用ThreadStart来实例化Thread,ThreadStart是在.Net Framework 中已经定义好的委托,ThreadStart定义为:public delegate void ThreadStart();使用方法如下面的代码: static void Main(string[] args) { Demo demo = new Demo(); Thread t = new Thread(new ...
阅读全文
摘要:第一印象,C#关于线程同步的东西好多,保持了C#一贯的大杂烩和四不象风格(Java/Delphi)。临界区跟Java差不多只不过关键字用lock替代了synchronized,然后又用Moniter的Wait/Pulse取代了Object的Wait/Notify,另外又搞出来几个Event……让人甚是不明了。不管那么多,一个一个来吧。临界区(Critical Section) 是一段在同一时候只被一个线程进入/执行的代码。为啥要有这个东西?是因为这段代码访问了“临界资源”,而这种资源只能同时被互斥地访问。举个例子来说,你的银行账户就是一个互斥资源,一个银行系统里面改变余额(存取)的操作代码..
阅读全文
摘要:LINQ提供了方便的语法和很多操作对象集合的有用的方法。但是,要让LINQ比较方法,如Distinct或Intersect能正确处理,类型必须要满足一些条件。让我们看看Distinct方法,它从集合中返回所有的不重复对象。List<int> numbers =newList<int> { 1, 1, 2, 3 };vardistinctNumbers = numbers.D...
阅读全文