博文

线程--使用线程回调方法(示例下载) (2006-05-26 11:39:00)

摘要:(一).描述
   此示例演示使用线程回调方法
(二).代码
   using System;
using System.Threading;
using System.Runtime.Remoting.Messaging; namespace 回调

 //委托声明(函数签名)
 delegate string MyMethodDelegate();  class MyClass
 {
  //调用的方法
  public static string MyMethod()
  {   
   //Console.WriteLine(System.Threading.Thread.CurrentThread.IsBackground);
   for(int i = 0;i < 3; i++)  //延长时间(模拟实际任务)
   {
    Thread.Sleep(1000);
   }
   return "Hello Word";
  }
  
  //声明委托,调用MyMethod
  private static MyMethodDelegate d = new MyMethodDelegate(MyClass.MyMethod);
  
  //声明委托,调用AsyncCallbackMethod
  private static System.AsyncCallback a = new System.AsyncCallback(MyClass.AsyncCallbackMetho......

阅读全文(4323) | 评论:0

线程--等待句柄(示例下载) (2006-05-26 11:39:00)

摘要:(一).描述
    本示例代码实现线程等待等待执行,比如一个线程在执行之前要等待所有其它线程或某个线程
先执行完成,或者等待其它线程至少一个执行完成.
(二).代码
    using System;
    using System.Runtime.Remoting.Messaging;
    using System.Threading; namespace 等待句柄

 //委托声明(函数签名)
 delegate string MyMethodDelegate();
 class MyClass
 { 
  //要调用方法1
  public string Write1()
  {
   for(double i = 0; i < 100000000000;i++)  //此数值大小可以根据自己的环境修改,
                                                                 //目的是让此方法延长时间而已
   {
  &n......

阅读全文(2255) | 评论:0

线程--通过委托异步调用方法(示例下载)(2006-05-26 11:37:00)

摘要:(一).描述
  先运行个简单的线程示例,认识一下线程
  通过委托调用方法,以及使用AsyncResult判断线程的状态 (二).代码
using System;
using System.Threading;
using System.Runtime.Remoting.Messaging; namespace 通过委托异步调用方法

 //委托声明(函数签名)
 delegate string MyMethodDelegate();  class MyClass
 {
  //要调用的动态方法
  public string MyMethod1()
  {
   return "Hello Word1";
  }   //要调用的静态方法
  public static string MyMethod2()
  {
   return "Hello Word2";
  }
 }
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
            MyClass myClass = new MyClass();
   
   //方式1:  声明委托,调......

阅读全文(4023) | 评论:1

线程--简述线程概述及原理 (2006-05-26 11:36:00)

摘要:线程是程序执行的基本原子单位. 一个进程可以由多个线程组成.
在分布式编程中,正确使用线程能够很好的提高应用程序的性能及运行效率. 实现原理是将一个进程分成多个线程,然后让它们并发异步执行,来提高运行效率. 并发执行并不是同时执行(占有CPU),任意时刻还是只能有一个线程占用CPU,
只不过是它们争夺CPU频繁一些,感觉到他们似乎都在运行. 下面通过一个简单的例子来说明一下它的工作原理 设一个进程要完成两个任务:任务1和任务2
 并且任务1要经历: A1->B1->C1三个步骤才能完成
     任务2要经历: A2->B2->C2三个步骤才能完成
  I.如果两个任务同步执行的话完成两个任务是这样执行的:
   
    花费时间段:   1   2   3   4   5  6
                 A1->B1->C1->A2->B2-C2
   
     这样从A1一直到c2只能一个一个地执行. 当A1占用CPU执行时,从B1到C2线程只能在等待. 
     甚至它们不相互竞争同一个资源时,也要等待前面的执行完成,自己才能执行
  II.如果两个任务异步执行的话完成两个任务是这样执行的:
  
    花费时间段:   1   2   3   4   5  6   
 &nbs......

阅读全文(2490) | 评论:0

使用多线程加载多个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) && (......

阅读全文(1840) | 评论: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......

阅读全文(1625) | 评论:0

域和工作组的区别  [转](2006-05-26 10:58:00)

摘要:1.工作组篇:

概述:工作组是最常用最简单最普遍的资源管理模式。为什么说他简单是因为默认情况下计算机都是采用工作组方式进行资源管理的。默认情况下所有计算机都处在名为workgroup的工作组中。

使用工作组的好处:在一个网络内,可能有上百台电脑,如果这些电脑不进行分组,都列在“网上邻居”中,电脑无规则的排列为我们访问资源带来不方便。为了解决这一问题,Windows98操作系统之后就引用了“工作组”这个概念,将不同的电脑一般按功能分别列入不同的组中,如软件部的电脑都列入“软件部”工作组中,网络部的电脑都列入“网络部”工作组中。你要访问某个部门的资源,就在“网上邻居”里找到那个部门的工作组名,双击就可以看到那个部门的电脑了。计算机通过工作组进行分类,使得我们访问资源更加具有层次化。

 

小提示:

并不是说不在同一个工作组中的计算机就不能互相访问了,当两台计算机所在工作组是同一个时,进入网上邻居选“邻近的计算机”就可以看到对方,而不在一个工作组的话则需要进入网上邻居选择“整个网络->Microsoft Windows网络”,这时才可以看到局域网中其他工作组了,进入相应的工作组后通过双击鼠标实现访问他们的目的。

 

设置工作组:

首先我们来看看如何加入一个工作组,例如我们的计算机希望加入名为ftxxzx的工作组。步骤如下:

第一步:在系统桌面上鼠标右键点“我的电脑”,选择属性。

第二步:在弹出的窗口中选择“网络标识”标签。

第三步:点属性按钮进入工作组设置窗口,在隶属于工作组处输入我们希望加入的工作组名——ftxxzx即可。

第四步:设置完毕后需要重新启动计算机才能将新设置生效。

上面介绍的步骤是对WIN2000及其以上操作系统而言的,对于WIN98具体操作类似。当然如果要离开这个工作组只要按照上面介绍的方法将本地计算机所在的工作组改名即可。而且工作组名可以是英文也可以是中文。

总结:工作组资源管理模式适合于网络中计算机不多,对管理要求不严格的情况。他的建立步骤简单,使用起来也很好上手。大部分中小公司都采取工作组的方式对资源进行权限分配和目录共享......

阅读全文(3881) | 评论:0

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);
}

阅读全文(8387) | 评论:3

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,新创建的类可以将这些复杂的算法打包到非常易于使用的属性和方法中。

散列简介
如果您只是不想让别人窃取您的密码,那么可以为密码数据创建一个散列。散列是一种单向算法,一旦数据被转换,将无法再获得其原始值。大多数开发人员使用数据库存储密码。但是,在数据库中查找用户数据的人员也能够看到这些密码。......

阅读全文(3487) | 评论:0

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......

阅读全文(3001) | 评论:0