AvalonDock 2.0入门指南第一部分

AvalonDock 2.0可以用来为WPF创建一个类似Visual Studio的界面,深入理解如何使用AvalonDock进行开发是很重要的。 在这个入门指南里,我将演示如何开始使用AvalonDock,下面的文章都是基于2.0版本的。并且不能用于早期的版本。 AvalonDock是一个组合的布局模型,很多的控件都在视图上显示,一个DockingManager 类也显示在停靠区,用于可以拖拽文档和工具。 从下面这个截图中我们可以理解AvalonDock组件 DockingManager 这是AvalonDock中的核心控件,它将包含的窗格排序,处理飞出的窗格,还有浮动的窗口。在上面这个图中,DockingManager 对象包含了所有空间(WPF控件),从顶部的工具栏到底部的状态栏都算。同时。DockingManager 也可以处理保存和恢复布局。 LayoutPanel 这个面板用来管理在一个方向上的子窗口(通过Orientation属性来选择方向),并且在它们之间添加了一个大小调节控件,在一个Orientation属性是Horizontal(水平)的LayoutPanel 上,排列了三个窗格。一个LayoutAnchorablePane在左,一个LayoutDocumentPane在中间。一个LayoutDockablePane在右边。 LayoutDockablePane 这个布局元素包含一个LayoutAnchorable对象的集合。通过它用来管理想TabControl这样的控件,在上面的截图中,LayoutDockablePanes是在左边的’Strumenti' 和 ‘Progetti’ (工具和项目) 和在右边的’Classi' 和 ‘Proprieta’' (类视图和属性视图)的容器,一个LayoutDockablePane可以自动隐藏,就像’Errori'(错误)和’Lista Azioni'(操作列表) and ‘Uscita’(输出)。并且LayoutDockablePane可以被拖动到DockingManager上,成为一个浮动窗口或者附着到它的父控件DockingManager的边缘上。 LayoutDocumentPane 通常包含文档(DocumentContent类型)的一种窗格,但是其实也可以包含像上面提到的工具视图和类视图这样的DockableContents。在一个文档里。LayoutDocumentPane 被放置在ResizingPanel(水平方向)里。ResizingPanel则是上卖弄提到的在两个DockablePane中间的区域。注意。文档窗格是不能被移动的。 LayoutAnchorable 一个停靠内容,是软件控件的容器,总是被包含在一个窗格里(LayoutAnchorablePane或是LayoutDocumentPane),在截图里。LayoutAnchorable是一类对象(包含一个SharpDevelop对象),工具对象,但是错误窗口(它处于自动隐藏状态,被好办在一个自动隐藏窗格里)不是。LayoutAnchorable就像它名字所暗示的那样。可以被从他的容器窗格里拖走。然后重新放置在一个存在的窗格里。或者是放置在父DockingManager的边缘,或者是放置在一个浮动窗口里(LayoutAnchorableFloatingWindow)。 LayoutDocument 是一个仅可以被寄宿到LayoutDocumentPane的内容。它是一个特殊的内容,因为不能被停靠到边缘。仅能被放置到LayoutDocumentPane里。或者浮动在一个LayoutDocumentFloatingWindow窗口里。在途中,DocumentContent对象是program.cs' 或 ‘MainForm.cs’ 文件视图 **LayoutFloatingWindow **,是一个包含内容的窗口,当被拖动到一个DockingManager上面的时候,LayoutFloatingWindow(LayoutAnchorableFloatingWindow和LayoutDocumentFloatingWindow继承自他)集成在Window,总是包含一个窗格(LayoutAnchorablePane或是LayoutDocumentPane),窗格包含更多的内容(LayoutAnchorable或LayoutDocument),当用户对一个内容或是DockablePane执行拖拽,或者直接手工使用代码调用LayoutContent.Float()方法 LayoutFloatingWindow就被直接从DockingManager创建出来了。 LayoutPane 一个基类,LayoutDockablePane和LayoutDocumentPane继承自它。它为他们提供了一些共有的属性和方法。 LayoutContent 是LayoutAnchorable 和LayoutAnchorable类的父类。提供了共有的属性和方法。 理解布局元素是一些属于布局模型的类而不是属于视图是很重要的。因为,他们不是继承自FrameworkElement类,取而代之。AvalonDock包含了另一些类来展示这些组件的视图。这些类通常被命名为相关联的类名+Control字串。举个例子,在布局里创建的LayoutAnchorable创建了一个LayoutAnchorableControl(继承自FrameworkElement的类),并且绑定了LayoutAnchorableControl.Model 到这个LayoutAnchorable对象上。 每一个被创建的视图控件总是有着Model属性的布局元素。因此,重新设计一个相关视图控件的样式是可以的。 为了开始创建一个新的.net 4/.net 4.5的解决方案。并且添加对AvalonDock.dll的引用(可以直接添加也可以使用NuGet),然后添加AD命名空间到MainWindow.xaml中。 在根Grid下放置DockingManager组件和一个简单的布局。 DockingManager是AvalonDock的核心类,他的责任就是创建管理布局。布局被定义成一个ILayoutElement的树。树的根由LayoutRoot类指定。LayoutRoot由一些基本的子树来构成。。 1.根面板的 根属性指向主 LayoutPanel,也是LayoutRoot的内容属性。 2.大体上讲,RightSide/LeftSide/TopSide/BottonSide是LayoutAnchorGroup对象的集合属性,他们表示了停靠管理器的四个边。停靠管理器的锚通常是隐藏的。当用户移动鼠标到这些区域的时候。就会在自动隐藏的窗口里显示出来。 3.FloatingWindows属性是FloatingWindow的集合。一个浮动窗口当用户拖动一个窗格(LayoutAnchorable或是LayoutDocument)的时候就被创建出来,这个集合可以被AvalonDock自动更新,但是用户依然可以通过调用LayoutContent的Float()方法来创建一个浮动窗口。 Hidden是一个Anchorable(停靠)对象的集合。默认情况下,当用户点击一个LayoutAnchorable对象的关闭按钮,AvalonDock隐藏它:通过从布局里移除停靠元素,并且把他放入Hidden集合,当用户想要再一次显示的时候,AD又把这个内容从隐藏集合里删除重新显示在他被隐藏的那个窗格里。 当使用布局树的时候,程序员可以创建任何复杂的界面,LayoutAnchorablePane的DockWidth和DockHeight属性可以被用来设置窗格的初始宽度和高度。而LayoutDocumentPane类通常则填满可用的空间。AvalonDock管理内容元素的宽度和高度以使得可以使用所有的可用空间。因此如果一个LayoutAnchorablePane被放置在一个LayoutPanel里,为LayoutAnchorablePane使用一个固定尺寸而为LayoutDocumentPane使用一个比例长度。也就是说为停靠对象使用了比例长度。 一个LayoutDocumentGroup/ LayoutAnchorableGroup类可以被用来包含更多的LayoutDocumentPane/ LayoutAnchorablePane,举个例子,让我们来改变上面的例子来实现更复杂的例子。 运行这个工程你就可以重新排列内容了。移动他们到浮动窗口。为了更加熟悉AvalonDock,我建议你多试几次,然后重新排列内容实现更复杂的布局。 在入门指南的第二部分。我将演示我们如何保存布局。附加事件像DocumentClose/ DocumentClosing 或者ActiveContent 改变的事件。 原文地址:AvalonDock 2.0 getting started guide PART 1 著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

C# 网络编程系列

本系列来自博客园的Learning hard园友。每个博主都不容易,我这里只是给出一个索引,希望更多热爱技术的人能够看到。给分享者更多的鼓励和支持。 专题一:网络协议简介 专题二:HTTP协议详解 专题三:自定义Web服务器 专题四:自定义Web浏览器 专题五:TCP编程 专题六:UDP编程 专题七:UDP编程补充——UDP广播程序的实现 专题八:P2P编程 专题九:实现类似QQ的即时通信程序 专题十:实现简单的邮件收发器

C#编写youtube下载器

介绍 本文将会暂时如何仅仅使用C#来下载youtub视频,代码简单也容易理解,每个人都可以把它整合到自己的工程项目里。 我没有使用任何第三方的库来完成这段代码,你所要做的仅仅是把两个.cs文件整合进你的项目里。 使用代码 这个工程里有两个主要的类 YouTubeVideoQuality Class(youtube视频质量类) YouTubeDownloader Class(youtube下载类) 有趣的地方 使用这个代码,你可以根据你的网速来选择不同品质的视频来下载 许多人网速很慢他们不能在线看youtube,因为我写了这个代码帮助这些人来下载视频到他们的PC上。这样,他们就能离线看了。。 许可 本文。包括源代码和文件,在CPOL下授权。 原文地址:YouTube-Downloader-Using-Csharp-NET 著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

C#删除文件和文件夹到回收站

如果使用C#代码来删除文件或是文件夹。会将文件和文件夹直接删除,而不是删除到回收站。可以调用Microsoft.VisualBasic.dll提供的方法。 首先对项目添加名为Microsoft.VisualBasic.dll的引用,然后添加命名空间 最后示例代码如下: 很简单。。就不多说了。。

VS扩展故障,错误码:80131515

介绍 如果你给VS安装了Web Search扩展,如果第一次运行就出现了错误代码是80131515的问题。那么本文对你是有用的。。 背景 当我远程试图运行Web Search的时候出现了这个错误。我用本文第一种方法解决了。。 解决方法 这个错误发生在当我远程以dll的方式调用的时候提示我说权限不够。。 为了解决这个问题,我们需要给devenv.exe.config文件添加loadFromRemoteSources 元素 首先使用管理员权限从下面的路径打开devenv.exe.config文件。 具体路径:你的VS安装目录\Common7\IDE\devenv.exe.config 并且添加loadFromRemoteSources 元素,并设为true。如下: 有时候windows会把下载的文件标记为“此文件来自一个不同的位置” ,然后对这些文件进行了很多的限制,这部分就是解锁下载的zip或是dll文件 为了解锁这些文件,只要右键点击这些文件,属性,选择常规,然后点击解锁按钮。如下图: 如果你还有其他的解决方法请告诉我哦。 许可 本文,包括源代码和文件,在CPOL下授权。 原文地址:Visual-Studio-Add-in-Troubleshooting-Error-Number 著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

WPF毛玻璃效果Demo和一个问题

那天看到WPF书上讲的毛玻璃效果,就去找了下效果。。忘了例子是从哪发现得了。。先看下效果, 但是这不是重点,作者给出的代码有一个设计时错误。。错误提示为: 无法将类型为“Microsoft.Expression.Platform.WPF.InstanceBuilders.WindowInstance”的对象强制转换为类型“System.Windows.Window”,,  中文搜了一下。没有发现有人解决过。目测。。。然后又拿英文搜了下。几经辗转。。终于是解决了。。原文在Unable to cast XAML error。其实就是将原作者这个函数修改如下的  也就是验证了一下转换是否成功。 下载:修改后的RGSamples

.net显示网络连接状态图标

效果图: 介绍  越来越多的软件要通过连接互联网来执行一些业务层的业务操作,比如调用web services服务,获取数据等等。 通常你可能希望知道当前你的网络连接是不是真的连上了,当然有很多种方法可以做到,比如,你可以查看System.Net 命名空间中的NetworkInterface 的状态,但是有这以太网连接并不表示你的连接真的可以用。 本文将会展示一种方法,该方法在程序的状态栏StatusStrip 显示一个简单的图标来指示是不是真的连接到了互联网。 使用代码  最简单的我们会想到使用一个Timer来进行http-get请求来判断一个特定的网页是否可用。  当然这种方法下,我们最应该考虑的就是请求不能阻塞UI线程,因此,我将使用一个BackgroundWorker 对象来进行get请求,BackgroundWorker 对象声明了DoWork方法。该方法定义了一个事件句柄,该句柄传递一个DoWorkEventArgs 类来将事件的处理结果返回到UI线程,因此,你不必与任何的UI元素进行交互,因为它运行在一个独立的线程里。  这个查询很简单,我执行简单的HttpWebRequest 来请求一个必然是可用的网页。比如微软的主页或是Google的主页。通过这样,我们就能知道是不是真的连接上了互联网。  当BackgroundWorker 对象完成了他的工作,,也就是定义DoWork 里的事件,他会触发RunWorkerCompleted 事件,这个事件也定义了一个定制的事件句柄- RunWorkerCompletedEventArgs 有了这个类,我们就可以管理ToolStripStatusLabel的显示了 结论  .net 是的使用后台线程很容易,也是的我们的UI有了更加平滑,有好的体验,现在,VS2005强烈建议手工为DoWork指定你的代理 ,因为VS.net有一个bug,当你尝试着重写而不是在另一个独立的线程里使用UI代码,VS可能会替换你写的代码。。 如果你需要使用Web Service,也许你可以考虑添加一个GetVersion的方法到你的Web Service里。然后尝试去访问这个服务。来确定你的web服务器是不是正常可用。 历史  Demo version - 1.0.0.0 –随文附 许可本文没有显式的许可,但是可能包含了一些使用上的条款,不论是在文章里还是在下载的代码里。如果有疑问联系我吧。。 原文地址:Display an Internet Connection status icon using .NET Framework 2.0 著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢! 源代码下载:InternetConnectionStatus

一个可定制的WPF任务对话框

今天实在看WPF揭秘的时候看到TaskDialog这个控件的。然后就去找了一下开源的代码。在codeproject上发现了这个,非常给力。。另外codeproject改版后很漂亮哦。 介绍: 这是用WPF实现Vista上TaskDialog效果的代码。 Messagbox消息框 通过调用重写的静态Show方法。TaskDialog就会表现的像一个Messagebox。他有四个文本类型的属性:Header(头部), Content(内容), Detail(更多), 和 Footer(底部),其实Detail是一个折叠的区域, 而Header和Footer还有一个icon属性(HeaderIcon和FooterIcon),除此之外,Header还有Background(背景)和Foreground(前景)属性 定制TaskDialog 使用静态的Show方法。Header, Content, Detail, 和Footer 就限制了只能传递字符串作为值了。 为了定义这个对话框,你先创建TaskDialog类的一个对象,然后分别设置一下各个属性,最后调用Show方法就可以了 TaskDialog控件派生自HeaderedContentControl类,因为从HeaderedContentControl类可以获得Header和Content属性,TaskDialog仅仅是添加了Detail和Footer属性,这些属性是Object类型,并且有他们自己的template(模板)属性HeaderTemplate, ContentTemplate, DetailTemplate, 和 FooterTemplate),TaskDialog类对于文本内容有着缺省的数据模板,当然你也可以用那四个模板来替换,这样你就可以以你喜欢的任何方式来格式化文本了。下面这个图展示了通过斜体和下划线来格式化文本。 图2 因为Header,Content,Detail和Footer是object类型,因此不再受到只能是文本的限制了,你可以防止你喜欢的任何类型到TaskDialog,下面这个例子中的TaskDialog是不是很像UAC的提示呢。这里Content属性是一个UserControl类型,放置了一个图片和一些文本还有两个CommandButtons(都是普通的按钮。。不过添加了一些定制的样式,再加了Header属性) 图三 一个模拟vista的文件拷贝窗口的TaskDialog。。 图四 额外的一些有意思的属性 下面是TaskDialog暴露的属性列表(按字母表排序) Button1Text: string类型,当TaskDialogButton属性被设置为Custom的时候,用来设置按钮的文字 Button2Text: 同上 Button3Text: 同上 DefaultResult: TaskDialogResult类型. 设置缺省的按钮 IsButton1Enabled: bool类型. 获取或设置按钮的Enabled状态 IsButton2Enabled: 同上 IsButton3Enabled: 同上 IsCloseButtonEnabled: bool类型. 获取或设置窗口关闭按钮的Enabled状态 (缺省为false) IsExpanded: bool类型,获取或是设置Detail部分的可见性。 IsModal: bool类型,获取或是设置对话框是不是模态的 ShowInTaskBar: bool类型,获取或是设置对话框是不是显示在任务栏中 SystemSound: TaskDialogSound类型. 设置当对话框显示的时候播放的声音 TaskDialogButton: TaskDialogButton类型. 显示在对话框上的按钮可以是None, Ok, OkCancel, YesNo, YesNoCancel, or Custom (查看上面提到的按钮设置) title: string类型,对话框的标题 ToggleButtonTexts: TaskDialogToggleButtonTexts提供了两个属性来设置toggle按钮的这个属性,当toggle 按钮折叠或是展开的时候 (缺省是’Show Details' 和’Hide Details'). TopMost: 设置对话框是否置顶 Demo 下载TaskDialog例子,查看Window1.xaml中按钮的单击事件,来看TaskDialog是如何被创建的。。 版权:本文,包括源代码和文件,在CPOL下授权。 原文地址:A-Customizable-WPF-TaskDialog 著作权声明:本文由http://leaver.me 翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

汇编-32位CPU所含有的寄存器

今年的课程有汇编。真为校领导的智商捉鸡。。不过还是要学的。分享一篇来自中文FLEX例子的汇编寄存器的文章。很不错的一篇寄存器详解的文章。文章最后是我找到的一个汇编指令助手。  4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器  数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。  4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种”可分可合”的特性,灵活地处理字/字节的信息。  寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、 除、输入/输出等操作,它们的使用频率很高; 寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作 中,当移多位时,要用CL来指明移位的位数;  寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也 可用于存放I/O的端口地址。在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。 2、变址寄存器  32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。  寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。 3、指针寄存器  32位CPU有2个32位通用寄存器EBP和ESP。其低16位对应先前CPU中的SBP和SP,对低16位数据的存取,不影响高16位的数据。  寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。  它们主要用于访问堆栈内的存储单元,并且规定:  BP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;  SP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。 4、段寄存器  段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成  的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。  CPU内部的段寄存器:  CS——代码段寄存器(Code Segment Register),其值为代码段的段值; DS——数据段寄存器(Data Segment Register),其值为数据段的段值; ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值; FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值; GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。  在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简单描述如下:  实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑地址仍为”段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。  保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为”选择子”(Selector)的某个值。 5、指令指针寄存器  32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。  指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能时,不考虑存在指令队列的情况。  在实方式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只用其低16位的IP来反映程序中指令的执行次序。 6、标志寄存器  一、运算结果标志位  1、进位标志CF(Carry Flag)  进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。  2、奇偶标志PF(Parity Flag)  奇偶标志PF用于反映运算结果中”1″的个数的奇偶性。如果”1″的个数为偶数,则PF的值为1,否则其值为0。  利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。  3、辅助进位标志AF(Auxiliary Carry Flag)  在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:  (1)、在字操作时,发生低字节向高字节进位或借位时; (2)、在字节操作时,发生低4位向高4位进位或借位时。  对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。  4、零标志ZF(Zero Flag)  零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。  5、符号标志SF(Sign Flag)  符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。  6、溢出标志OF(Overflow Flag)  溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。”溢出”和”进位”是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。  二、状态控制标志位  状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。  1、追踪标志TF(Trap Flag)  当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。  2、中断允许标志IF(Interrupt-enable Flag)

Html解析工具-HtmlAgilityPack

这个工具是在暑假的时候发现的。但是最后没用这个工具。不过,这个工具可是非常强悍的。。 HtmlAgilityPack主要就是解析DOM的。常用的基础类其实不多,对解析DOM来说,就只有HtmlDocument和HtmlNode这两个常用的类,还有一个 HtmlNodeCollection集合类。我给出一个抓取我博客首页文章的例子。看代码可能更清楚一点。你可以去看看压缩包里提供的文档。 xpath如果自己写表达式比较麻烦。所以我还找到了这个HtmlAgilityPack提供了的一个xpath辅助工具-HAPExplorer。都给出了地址。 首先看我的例子,抓取我博客的首页文章: 程序运行结果: xpath表达式的具体书写都是需要分析你需要解析的网站源码的。。。。 xpath辅助工具的界面: 下载:HtmlAgilityPack 下载:HAPExplorer