博文
使用多线程加载多个Xml文件到TreeView控件(2006-05-26 11:25:00)
摘要:在很多情况下程序员需要采用多线程来开发应用程序,用户可以在前台操作数据或其他工作,在后台程序正在加载很大的一些文件,而这一过程不会影响到前台的用户。在这篇文章中,我来讲述一下怎样通过多个线程来加载多个文件。
在这个例子中我们将来研究这样一件事情,读取多个Xml文件并通过TreeView把它们显示出来。我们可以通过数据库来完成,不过为了保持例子的简单这里采用了Xml文件。
你会注意到我们有两个xml文件同原代码放在一起。
程序用户界面如下:
Filedisplayer类用来显示上面的窗体。窗体的包括一些按纽:浏览按纽,运行按纽,终止按纽以及退出按纽。应用程序可以通过点击退出按纽来结束整个程序的运行。当点击浏览的时候会打开一个文件选择对话框来加载Xml文件。当然你也可以直接在文本框中输入文件全路径。
private void selectbutton_click(object sender, System.EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "All Files (*.*)|*.*|Text Files (*.txt)|*.txt";
if (openFileDialog1.ShowDialog () == DialogResult.OK)
{
String fileName = openFileDialog1.FileName;
//如果文件扩展名为xml,选择成功
if ( (fileName.Length != 0) && (......
用C#去除代码的SourceSafe管理(2006-05-26 11:23:00)
摘要: 经常看一些的程序,有些一个解决方案带有多个项目,由于代码比较多,多人开发,所以好多vs.net下的工程是用source safe进行版本控制的。而用source safe进行版本控制需要局域网路径共享,因此好多项目换一台机器打开会出现一些问题,比如“解决方案看起来是受源代码管理,但无法找到它的绑定信息……”之类的提示信息很多。有时候修改了代码还保存不了,所以想把他去掉,下面是对项目管理前后的一些对比。
一、工程项目比较
同没有受Source Safe代码管理的工程相比:
1. 多出了.scc、.vssscc和.vspscc文件;
2. C#项目文件(.csproj)里面添加了几行标签:
SccProjectName = "SAK"
SccLocalPath = "SAK"
SccAuxPath = "SAK"
SccProvider = "SAK"
3.在解决方案文件(.sln)中,中增加了如下节点原素:
GlobalSection(SourceCodeControl) = preSolution
SccNumberOfProjects = 4
SccLocalPath0 = .
……
SccLocalPath3 = SUBSCRIBE_TOOLS
&nb......
域和工作组的区别 [转](2006-05-26 10:58:00)
摘要:1.工作组篇:
概述:工作组是最常用最简单最普遍的资源管理模式。为什么说他简单是因为默认情况下计算机都是采用工作组方式进行资源管理的。默认情况下所有计算机都处在名为workgroup的工作组中。
使用工作组的好处:在一个网络内,可能有上百台电脑,如果这些电脑不进行分组,都列在“网上邻居”中,电脑无规则的排列为我们访问资源带来不方便。为了解决这一问题,Windows98操作系统之后就引用了“工作组”这个概念,将不同的电脑一般按功能分别列入不同的组中,如软件部的电脑都列入“软件部”工作组中,网络部的电脑都列入“网络部”工作组中。你要访问某个部门的资源,就在“网上邻居”里找到那个部门的工作组名,双击就可以看到那个部门的电脑了。计算机通过工作组进行分类,使得我们访问资源更加具有层次化。
小提示:
并不是说不在同一个工作组中的计算机就不能互相访问了,当两台计算机所在工作组是同一个时,进入网上邻居选“邻近的计算机”就可以看到对方,而不在一个工作组的话则需要进入网上邻居选择“整个网络->Microsoft Windows网络”,这时才可以看到局域网中其他工作组了,进入相应的工作组后通过双击鼠标实现访问他们的目的。
设置工作组:
首先我们来看看如何加入一个工作组,例如我们的计算机希望加入名为ftxxzx的工作组。步骤如下:
第一步:在系统桌面上鼠标右键点“我的电脑”,选择属性。
第二步:在弹出的窗口中选择“网络标识”标签。
第三步:点属性按钮进入工作组设置窗口,在隶属于工作组处输入我们希望加入的工作组名——ftxxzx即可。
第四步:设置完毕后需要重新启动计算机才能将新设置生效。
上面介绍的步骤是对WIN2000及其以上操作系统而言的,对于WIN98具体操作类似。当然如果要离开这个工作组只要按照上面介绍的方法将本地计算机所在的工作组改名即可。而且工作组名可以是英文也可以是中文。
总结:工作组资源管理模式适合于网络中计算机不多,对管理要求不严格的情况。他的建立步骤简单,使用起来也很好上手。大部分中小公司都采取工作组的方式对资源进行权限分配和目录共享......
Thread 类实例方法总结 [原](2006-05-26 10:55:00)
摘要:Thread.Sleep(int i):将当前线程阻塞(暂停)指定的毫秒数,并使线程处于WaitSleepJoin状态。可以通过Thread.Interrupt()来唤醒它。
Thread.Suspend():挂起(睡眠)线程,或者如果线程已挂起,则不起作用。如果不使用Thread.Resume()来唤醒它,则线程被永久的挂起。
Thread.Join():阻塞(暂停)调用线程,直到某个线程终止时为止。常和Thread.Abort一起使用,保证线程被顺利结束。
Thread.Abort():终止当前线程的执行,在线程上调用此方法时,系统在此线程中引发 ThreadAbortException 以中止它。ThreadAbortException 是一个可以由应用程序代码捕获的特殊异常,但除非调用 ResetAbort,否则会在 catch 块的结尾再次引发它。ResetAbort 取消要中止的请求,并阻止 ThreadAbortException 终止此线程。未执行的 finally 块将在线程终止前执行。
为什么线程结束前要抛出一个异常呢?为什么即使已捕获到该异常,但在 catch 块的结尾会再次被运行库引发呢?为什么必须调用ResetAbort()来取消终止请求呢?看下面的例子:
using System;
using System.Threading;
using System.Security.Permissions;
public class ThreadWork
{
public static void DoWork()
{
try
{
for(int i=0; i<100; i++)
{
Console.WriteLine("Thread - working.";
Thread.Sleep(100);
}
microsoft .net 中的简化加密(MD5、SHA1) [转](2006-05-26 10:54:00)
摘要:microsoft .net 中的简化加密
2005-10-11 14:25:44
Paul D. Sheriff
PDSA.com
2003 年 10 月
适用于:
Microsoft? .NET
安全
Microsoft? Visual Basic? .NET
C#
摘要:学习如何利用 .NET Framework 的加密功能创建类似本文所述的包装程序来保护您的数据。
下载与本文相关的 CryptoSampleCSSample.msi 和 CryptoSampleVBSample.msi 代码示例。(请注意,在示例文件中,程序员的注释使用的是英文,本文中将其译为中文是为了便于读者理解。)
目录
散列简介
创建示例散列项目
在散列中添加“盐”值
小结
您希望在计算机上保存一些机密信息吗?如果是,本文就为您介绍如何进行加密!加密技术就是将有意义的字符编码成无意义的字符,使不应该访问这些数据的人员无法读取它们。加密技术已经存在很多年了,甚至远在计算机诞生之前就已经存在了。随着计算机的出现,在计算机领域应用加密技术可以生成几乎牢不可破的代码。Microsoft 在 Windows 95 中开发并分发了加密 API。使用 Microsoft .NET,新创建的类可以将这些复杂的算法打包到非常易于使用的属性和方法中。
散列简介
如果您只是不想让别人窃取您的密码,那么可以为密码数据创建一个散列。散列是一种单向算法,一旦数据被转换,将无法再获得其原始值。大多数开发人员使用数据库存储密码。但是,在数据库中查找用户数据的人员也能够看到这些密码。......
ASP.NET动态操纵绑定列 [原] (2006-05-26 10:51:00)
摘要:累了一个下午,总算有了点收获,把动态绑定列的操纵方式搞清楚了,ASP.NET中Datagrid实在太强大了。因为今天给学生讲代码用的是vb语法,干脆就cv过来:
Dim qstr As String = "Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=""" + Request.PhysicalApplicationPath + "Student.mdb"""
Dim odc As OleDbConnection = New OleDbConnection(qstr)
If odc.State = ConnectionState.Open Then
odc.Close()
End If
Dim oda As OleDbDataAdapter = New OleDbDataAdapter("select * from Student_info", odc)
Dim odb As OleDbCommandBuilder =&nb......
C#中的delegate和event (2006-05-25 14:46:00)
摘要:在基于Windows平台的程序设计中,事件(event)是一个很重要的概念。因为在几乎所有的Windows应用程序中,都会涉及大量的异步调用,比如响应点击按钮、处理Windows系统消息等,这些异步调用都需要通过事件的方式来完成。即使在下一代开发平台——.NET中也不例外。
那么什么是事件呢?所谓事件,就是由某个对象发出的消息,这个消息标志着某个特定的行为发生了,或者某个特定的条件成立了。比如用户点击了鼠标、socket上有数据到达等。那个触发(raise)事件的对象称为事件的发送者(event sender),捕获并响应事件的对象称为事件的接收者(event receiver)。
热门推荐故事
.Net边学边讲(一)
解读.NET架构核心开发技术
.NET体系中的源程序安全问题(1)
.NET体系中的源程序安全问题(2)
<展现C#> 第七章 异常处理(rainbow 翻译)
.NETFramework发现漏洞 可能导致信息丢失
使用C#开发一个简单的P2P应用
MSDN 访谈录之C#编程一
.NET体系中的源程序安全问题(2)
<展现C#> 第五章 类 (2)(rainbow 翻译)
在这里,我们将要讨论的是,在.NET的主流开发语言C#中如何使用自定义的事件来实现我们自己的异步调用。
在C#中,事件的实现依赖于delegate,因此我们有必要先了解一下delegate的概念。
Delegate
delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的引用。它所实现的功能与C/C++中的函数指针十分相似。它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。但与函数指针相比,delegate有许多函数指针不具备的优点。首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引用非静态成员函数时,delegate不但保存......
C#中动态创建控件及事件处理程序 (2006-05-25 14:46:00)
摘要:using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace Miner
{
/// <summary>
/// Summary des cription for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Panel panel1;
/// <summary>
/// Required designer variable.
/// </summary>
///
private Button[] n =new Button[100];
热门推荐故事
C#的控制台输入和输出
.Net正式版中的一些Bug及其解决方案
.NET体系中的源程序安全问题(2)
C#方法中的ref和out
c#学习笔记(1)
浅析J2EE与.NET平台优劣
用.net静态变量取代Application,速度更快
.NET对Sun ONE: Web服务开发平台对比测试 (2)
微软.Net卧虎藏龙
.net中即时消息发送的实现…… private int[] kn=new int[100];
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any construct......
正则表达式基础知识 (转)(2006-05-24 16:34:00)
摘要:
我们先从简单的开始。假设你要搜索一个包含字符“cat”的字符串,搜索用的正则表达式就是“cat”。如果搜索对大小写不敏感,单词“catalog”、“Catherine”、“sophisticated”都可以匹配。也就是说:
1.1 句点符号
假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“t n”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符:
1.2 方括号符号
为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符:
1.3 “或”符号
如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。圆括号还可以用来分组,具体请参见后面介绍。
1.4 表示匹配次数的符号
表一显示了表示匹配次数的符号,这些符号用来确定紧靠该符号左边的符号出现的次数:
假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。用来匹配它的正则表达式如图一所示。在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“\”。
......
客户端Cookie中文编程(下)(2006-05-24 16:34:00)
摘要:例如你要写入的Cookie内容是"一顶abc",经过CodeCookie变为"99a98a97a-31029a26432a"(基于安全考虑,将字符串反转),再经过escape编码后变为"99a98a97a%2D31029a26432a"(escape编码将除字母和数字以外的字符转换为十六进制%XX的形式),注意分隔符不能选%,D和数字。当然,如果有类似密码的重要信息,还需要在加密上再强化一下。因为写入Cookie的一般都是短信息,编码后增加的一些字节可忽略不计。下面的JavaScript读写Cookie函数中就加入了以上的中文支持。
function SetCookie(name,value,expires)
{
var exp=new Date();
exp.setTime(exp.getTime()+expires*60*1000);
document.cookie=name+"="+escape(CodeCookie(value))+" ; expires="+exp.toGMTString()+" ; path=/";
}
function GetCookie (name)
{
var strArg=name+"=";
var nArgLen=strArg.length;
var nCookieLen=document.cookie.length;
var nEnd;
var i=0;
var j;
while (i$#@60;nCookieLen)
{
j=i+nArgLen;
if (document.cookie.substring(i,j)==strArg)
{
nEnd=document.cookie.indexOf (";",j);
if (nEnd==-1) nEnd=document.cookie.length;
return DecodeCookie(unescape(document.cookie.substring(j,nEnd)));
}
i=document.cookie.indexOf(" ",i)+1;
if (i==0)......