Time of Update: 2018-12-05
1.採用迴圈方式://.....ManualResetEvent allDone = new ManualResetEvent(false);//訊號量listener.Listen(100);while (true){ allDone.Reset(); listener.BeginAccept(new AsyncCallback(AcceptCallBack),listener); allDone.WaitOne();}void
Time of Update: 2018-12-05
一、準備需要的軟體:Ildasm.exe:用來將dll,exe編譯為IL檔案ilasm.exe:用來將IL檔案編譯回來dll或exe這2個工具裝好VS就有了(VS2005的可以處理2003的,反過來不行)文本處理工具:UltraEdit :http://www.crsky.com/soft/1469.htmlEmEditorPro:http://www.crsky.com/soft/4278.html根據不同情況需要使用上面不同的工具其他工具:Reflector.exe :http://www.
Time of Update: 2018-12-05
巧用C#做中繼語言 實現Java調用.net DLL時間:2010-08-11 06:16來源:未知作者:壹號編輯點擊:3次本文將詳細為大家介紹一個java調用.net DLL的方法,以實現特殊的客戶的特殊要求:“在Java項目中必須使用其提供的用.net寫的DLL加密機制!”環境與工具:◆.net framework 3.5 C#◆java jdk1.5, Tomcat 5.5◆jacob-1.15-M3實現例子:一、C# 製作Com組件建立一個Class
Time of Update: 2018-12-05
導讀:作者蔣金楠,網名Artech。解決方案架構與互聯絡統MVP,微軟最有影響力開發人員。在《談談C#
Time of Update: 2018-12-05
轉自:http://hacker.cnblogs.com/archive/2004/08/12/32563.aspx1, PInvoke什麼意思? Platform Invocation Services2, 幹什麼用? 匯入外部函數?什麼是外部函數,就是不屬於.Net託管的函數。3,如何用?看下面的例子。用[DllImport(dllname)]來實現,但是首先要把System.Runtiime.InteropServices
Time of Update: 2018-12-05
.net 架構程式可以通過靜態 DLL 進入點的方式來訪問機器碼庫。DllImport 屬性用於指定包含外部方法的實現的dll 位置。 DllImport 屬性定義如下: namespace System.Runtime.InteropServices { [AttributeUsage(AttributeTargets.Method)] public class DllImportAttribute: System.Attribute { public
Time of Update: 2018-12-05
前言在我們應用程式開發過程中,經常會遇到一些問題,需要使用多線程技術來加以解決。本文就是通過幾個樣本程式給大家講解一下多線程相關的一些主要問題。執行長任務操作 許多種類的應用程式都需要長時間操作,比如:執行一個列印任務,請求一個 Web Service 調用等。使用者在這種情況下一般會去轉移做其他事情來等待任務的完成,同時還希望隨時可以監控任務的執行進度。?/P> 下面的代碼片斷樣本了當長任務執行時使用者介面是如何被更新的。// 顯示進度條void ShowProgress( int
Time of Update: 2018-12-05
最近在做項目的過程中,涉及到對硬體啟用及禁用的功能(在指定時間段內才能啟用硬體)。因為C#自身對硬體的操作基本為零,為此,搜尋了一下MSDN中與裝置相關的API函數。還果然就有。下面一一列舉出各函數的原型及相關的說明文檔。並將其轉為C#代碼實現。函數一: RegisterDeviceNotification功能:註冊裝置或者裝置類型,在指定的視窗返回相關的資訊原型:HDEVNOTIFY WINAPI RegisterDeviceNotification( __in HANDLE
Time of Update: 2018-12-05
讀了園子中一些前輩的關於C#中協變與逆變的文章,收穫很大,分享一下我的個人理解,希望用較淺顯的方式理解這個比較繞彎的概念。 協變與逆變應該是CLR的特性,我僅對我熟悉的C#舉例說明。說白了,它主要解決的是一個類型轉換的問題,用一個最簡單的泛型運算式就是:S<T1> =
Time of Update: 2018-12-05
在C#中,重載自增、自減操作符的文法並沒有什麼特殊之處,如下:public static SomeType operator ++(SomeType
Time of Update: 2018-12-05
做點筆記,不要遺漏自己覺得重要的或者以前不知道的東西,也督促自己學下去,不要半途而廢。Tips:is和as操作符都會校正對象是否相容於指定類型,強轉也會檢驗。所以最佳搭配是as後判斷是否為null,而不是is後as或is後強轉。前者只會有一次校正,後者都會有兩次。 命名空間是C#等的語言特性,CLR並不知道命名空間的任何事情。 類型對象中儲存了類型對象指標,同步索引塊,靜態欄位和方法(靜態,虛,非虛)。方法執行時會先進行JIT編譯(如果需要的話),然後調用JIT編譯的代碼。
Time of Update: 2018-12-05
CLR要求將介面方法標記為virtual,如果原始碼中沒有顯示地將方法標記為virtual,編譯器會將它們標記為virtual和sealed,這會阻止衍生類別重寫介面方法。 一個類型載入到CLR中時,會為該類型建立並初始化一個方法表。在這個方法表中,類型引入的每個新方法都有一條對應的記錄項;另外,還為該類型繼承的所有虛方法添加了記錄項。 可以用顯示介面方法實現(EIMI)來增強編譯時間的型別安全: internal struct SomeValueType : IComparable{
Time of Update: 2018-12-05
很多C#的教材都會強調對象相等的概念。我們都知道,在C#的世界裡存在兩種等同性。一種是邏輯等同性:如果兩個對象在邏輯上代表同樣的值,則稱他們具有邏輯等同性。另一種是引用等同性:如果兩個引用指向同一個對象執行個體,則稱他們具有引用等同性。眾所周知,Object類型有一個名為Equals的執行個體方法可以用來確定兩個對象是否相等。Object的Equals的預設實現比較的是兩個對象的引用等同性。而Object的衍生類別ValueTpye重寫了Equals方法,它比較的是兩個對象的邏輯等同性。也就是說
Time of Update: 2018-12-05
http://www.cnblogs.com/tianzhiliang/archive/2010/08/31/1813629.htmlC#中非同步和多線程的區別是什麼呢?非同步和多線程兩者都可以達到避免調用線程阻塞的目的,從而提高軟體的可響應性。甚至有些時候我們就認為非同步和多線程是等同的概念。但是,非同步和多線程還是有一些區別的。而這些區別造成了使用非同步和多線程的時機的區別。 非同步和多線程的區別之非同步作業的本質
Time of Update: 2018-12-05
我們知道,在匿名方法或者lambda中,可以訪問或者修改該匿的定義範圍內的變數。例如:int num = 1; Func<int> incNum = () => ++num;其中lambda運算式使用了在其外部定義的變數num。我們可以認為該段lambda語句塊構成了一個閉包,而這個閉包捕獲了外部變數num。好了,不說那麼多讓人看著難受的定義套話了。我們進入正題,看看在C#中變數是如何被捕獲的。來看一個例子: public
Time of Update: 2018-12-05
問:當我們new一個對象時,會發生什麼事?答:調用該類型的建構函式。問題看似簡單,不過事實上,CLR做的比這要多。。。要準確回答這個問題,還要分情況來說。new一個參考型別首先,要執行個體化一個參考型別,就一定需要在堆上分配記憶體。要分配記憶體,就需要先計算出這個參考型別佔多大空間,需要給它分配多少記憶體。那怎麼計算呢?簡單!只要計算該類型所有欄位的長度總和就可以啦。我們知道,參考型別的欄位,佔一個指標的長度(32位機器上是4個位元組,64位機器上是8個位元組)。實值型別的欄位長度可以通過遞迴的
Time of Update: 2018-12-05
剛開始學習C#的時候,就聽說CLR對於String類有一種特別的記憶體管理機制:有時候,明明聲明了兩個String類的對象,但是他們偏偏卻指向同一個執行個體。如下:String s1 = "Hello";String s2 = "Hello"; //s2和s1的實際值都是“Hello”bool same = (object) s1 == (object) s2; //這裡比較s1、s2是否引用了同一個對象執行個體
Time of Update: 2018-12-05
Tips:選擇性參數和預設參數的配合: static void Test(){ M(c: 5);}static void M(int a = 1, int b = 2, int c = 3){ //do sth}這樣可以前兩個參數使用預設值。從CLR的角度看,out和ref完全一致。C#編譯器將這兩個關鍵字區別對待,這個區別決定了由哪個方法負責初始化所引用的對象。
Time of Update: 2018-12-05
using System.Drawing;using System.Windows.Forms;using System.Drawing.Drawing2D;namespace WindowsFormsApplication2{ public partial class Form1 : Form { public Form1() { InitializeComponent();
Time of Update: 2018-12-05
前一陣子我參加了一次筆試,其中有一道選擇題讓我印象深刻,是這樣的:執行個體化一個X類型對象時所執行的順序:A.調用X類型建構函式,調用X類型基類的建構函式,調用X類型內部欄位的建構函式B.調用X類型內部欄位的建構函式,調用X類型基類的建構函式,調用X類型建構函式C.調用X類型基類的建構函式,調用X類型建構函式,調用X類型內部欄位的建構函式D.調用X類型基類的建構函式,調用X類型內部欄位的建構函式,調用X類型建構函式 我覺的這道題出得很沒水平。在C++的世界裡,我會毫不猶豫的選D。但是,由於C#引