程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 積木模塊 ABC(一)

C# 積木模塊 ABC(一)

編輯:C#入門知識
  第一個C#程序:經典例程Hello World
  
  “Hello World”可以說是學習每一種編程語言的第一個例程了。我們可以在NotePad、Wordpad等任何編輯器中輸入以下的C#代碼,並保存為helloworld.cs,最後在命令行中執行csc helloworld.cs來運行文件:
  
  
  // using system
  using System;
  class Hello
  {
  static void Main() { // display output on console
  Console.WriteLine("Hello,C# World!");
  }
  }
  
  
  用OpenFileDialog類浏覽或打開文件
  
  同VC++中CfileDialog的 Open 方法相同,C#中的OpenFileDialog類可用於打開一個文件。這個類是從FileDialog派生出來的。用這個類中的 OpenFile方法打開一個文件,然後就可以通過流(steam)來讀取這個文件。
  
  請看下面的例程代碼,它使用 OpenFileDialog類浏覽一個文件:
  
  OpenFileDialog fdlg = new OpenFileDialog();
  fdlg.Title = "C# Corner Open File Dialog" ;
  fdlg.InitialDirectory = @"c:\" ;
  fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*" ;
  fdlg.FilterIndex = 2 ;
  fdlg.RestoreDirectory = true ;
  if(fdlg.ShowDialog() == DialogResult.OK)
  {
  textBox1.Text = fdlg.FileName ;
  }
  
  Title一行設置打開對話框的標題,Filter一行為打開的文件類型設置一個過濾器,FileName一行包含了所選中的文件名。
  
  
  下圖就是運行的結果:
  
  
  
  
  從C#中調用COM組件
  
  .NET框架是COM的一個自然發展,兩者共享許多核心要素,這包括組件的再利用以及語言的中立性。為了向後兼容,COM Interop可以使用現存的COM組件而不要求對原始組件進行修改。當一個 .NET 框架開發人員想將COM代碼合並到一個管理應用程序中時,就可以用COM Interop功能引入相關的COM類型。引入之後,這個COM類型就可以使用了。這屬於前期連接。但是有時候你需要對象的後期連接,這在.NET中也能實現,使用名稱空間映射就可以通過後期連接來調用COM對象。
  
  
  這裡介紹一個應用程序例程,它將調用Excel,並且通過使用後期連接使它可視。
  
  
  後期連接將使用Reflectionb的Type類,這個Type類有許多方法可以取得COM對象,就象我們已經使用過的 GetTypeFromProgID("Application"),這個方法從系統注冊表中得到COM ID,然後使用STATIC類的成員 Activator.CreateInstance()創建這個COM對象的一個新例示。
  
  
  要想調用COM對象的方法、函數和屬性,就必須使用包含正確設置的Type對象的InvokeMethod()方法。這個方法接受一些參數變量,其中最重要的一個是方法類型的ex屬性(get或set)。在例子中我們為Excel.Visible使用了set屬性,從而使Excel應用程序可視。
  
  
  我們將嘗試在.NET環境中調用Excel應用程序。這是一個後期連接應用程序,因為如果是前期連接的話你就需要使用COM對象的RCW(RunTime Callable Wraper:運行時間的可調用包)來完成下面的命令行程序tblimp所完成的任務:
  
  
  ex. c:\> tblimp /out:
  
  
  下載COMinDOTNET.zip,這是一個控制台應用程序。下面是調用excel的代碼:
  
  
  //Variable
  Type excel;
  object[] parameter= new object[1];
  object excelObject;
  try
  {
  //Get the excel object
  excel = Type.GetTypeFromProgID("Excel.Application");
  //Create instance of excel
  excelObject = Activator.CreateInstance(excel);
  //Set the parameter whic u want to set
  parameter[0] = true;
  //Set the Visible property
  excel.InvokeMember("Visible", BindingFlags.SetProperty, null, excelObject, parameter);
  }
  catch(Exception e)
  {
  Console.WriteLine("Error Stack {0} ", e.Message) ;
  }
  finally
  {
  //When this object is

[1] [2] 下一頁  

destroyed the Excel application will be closed
  //So Sleep for sometime and see the excel application
  Thread.Sleep(5000);
  //Relaese the object
  //GC.RunFinalizers()
  }
  
  
  創建多線程應用程序
  
  
  在.NET和C#中編寫一個多線程應用程序將非常得容易。即使對於那些從沒有用C#編寫過多線程應用程序的初學者,只需遵循以下這些簡單的步驟就可以實現目的。
  
  
  定義名稱空間
  
  在.NET中,多線程功能是在System.Threading名稱空間中定義的。因此,在使用任何線程類之前,必須定義 System.Threading名稱空間。定義方法如下:
  
  
  using System.Threading;
  
  
  啟動線程
  
  System.threading名稱空間中的Thread類代表一個線程對象,用這個類對象可以創建新的線程,刪除、暫停和恢復線程。 下面的代碼使用Thread類創建一個新的線程,然後啟動這個線程:
  
  
  thread = new Thread(new ThreadStart( WriteData ));
  
  thread.Start();
  
  
  其中WriteData是這個線程要執行的一個函數,代碼如下:
  
  
  protected void WriteData()
  
  {
  
  string str ;
  
  for ( int i = 0; i<=10000; i++ )
  
  {
  
  str = "Secondary Thread" + i.ToString();
  
  Console.WriteLine(listView1.ListItems.Count, str, 0, new string[]{""} );
  
  Update();
  
  }
  
  }
  
  殺死線程
  
  
  Thread類的Abort方法用於永久地殺死一個線程。但是請注意,在調用Abort方法前一定要判斷線程是否還激活,也就是判斷thread.IsAlive的值:
  
  
  if ( thread.IsAlive )
  
  {
  
  thread.Abort();
  
  }
  
  
  暫停線程
  
  
  Thread.Sleep方法用於將一個線程暫停一段時間,代碼如下:
  
  
  thread.Sleep();
  
  
  設置線程的優先權
  
  
  我們可以使用Thread類的ThreadPriority屬性設置線程的優先權。線程優先權的取值范圍是Normal、AboveNormal、BelowNormal、Highest或者Lowest。請看下面的設置代碼:
  
  
  thread.Priority = ThreadPriority.Highest;
  
  
  延遲線程
  
  
  Thread類的Suspend方法可以延遲一個線程。線程被延遲到調用Resume方法為止。
  
  
  if (thread.ThreadState = ThreadState.Running )
  
  {
  
  thread.Suspend();
  
  }
  
  
  恢復被延遲的線程
  
  
  調用Resume方法可以恢復一個被延遲的線程。如果線程沒有被延遲,Resume方法就是無效的。
  
  
  if (thread.ThreadState = ThreadState.Suspended )
  
  {
  
  thread.Resume();
  
  }  

上一頁  [1] [2] 

  1. 上一頁:
  2. 下一頁: