.NET Framework基础知识(二)(转载)
1、課外:為什么object數組可以賦值給object類型,int數組卻不能賦值給int類型?
答:因為不管是什么什么數組都繼承自Array,而Array又繼承自object。
2、線程:是操作系統分配處理器時間的基本單元。
3、支持搶先多任務處理的操作系統可以創建多個進程中的多個線程同時執行的效果。
???? 實現:在需要處理器時間的線程之間分割可用處理器時間,并輪流為每個線程分配處理器時間片。
當前執行的線程在其時間片結束時被掛起,而另一個線程繼續運行。當系統從一個線程切換到另一個線程時,
它將保存被搶先的線程的上下文,并重新加載線程隊列中下一個線程的已保存線程上下文。
4、.NET 用Thread創建并控制線程。注意:引入using
例:class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? ThreadStart ts = new ThreadStart(F1);
??????????? Thread th1 = new Thread(ts);
??????????? ThreadStart ts1 = new ThreadStart(F2);
??????????? Thread th2 = new Thread(ts1);
??????????? th1.Start();
??????????? th2.Start();
??????????? th1.Abort();
??????? }
??????? static void F1()
??????? {
??????????? while (true)
??????????? {
??????????????? Console.WriteLine("00000");
??????????????? Thread.Sleep(200);
??????????? }
??????? }
??????? static void F2()
??????? {
??????????? while (true)
??????????? {
??????????????? Console.WriteLine("11111");
??????????????? Thread.Sleep(200);
??????????? }
??????? }
?? }
5、線程的幾個方法:Abort終止線程執行,Sleep使線程睡眠一段時間,方法的參數單位為毫秒,
Join可以使線程阻塞
以join為例實現線程阻塞:
class Program
??? {
??????? static Thread ThrTest1, ThrTest2;
??????? static void Main(string[] args)
??????? {
??????????? ThreadStart TS1 = new ThreadStart(F1);
??????????? ThrTest1 = new Thread(TS1);
??????????? ThreadStart TS2 = new ThreadStart(F2);
??????????? ThrTest2 = new Thread(TS2);
??????????? ThrTest1.Start();
??????????? ThrTest2.Start();
??????? }
?????? public? static void F1()
??????? {
??????????? for (int i = 0; i < 20;i++ )
??????????? {
??????????????? if (i == 10)
??????????????? {
??????????????????? ThrTest2.Join();
??????????????? }
??????????????? Console.ForegroundColor = ConsoleColor.Blue;
??????????????? Console.WriteLine(i.ToString()+"F1");
??????????????? Thread.Sleep(500);
??????????? }
??????? }
?????? public static void F2()
?????? {
?????????? for (int i = 0; i < 20; i++)
?????????? {
?????????????? Console.ForegroundColor = ConsoleColor.Red;
?????????????? Console.WriteLine(i.ToString()+"F2");
?????????????? Thread.Sleep(500);
?????????? }
?????? }
??? }
6、lock用來實現同步控制,在幾個窗口同時在賣火車票或幾個售貨員同時在賣東西等可以用到lock。
以賣書為例:
class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? BookShop a = new BookShop();
??????????? Thread t2 = new Thread(new ThreadStart(a.Sale));
??????????? t2.Name = "李四";
??????????? Thread t1 = new Thread(new ThreadStart(a.Sale));
??????????? t1.Name = "張三";
??????????? t2.Start();
??????????? t1.Start();
???????????
??????? }
??? }
??? public class BookShop
??? {
??????? int num = 50;
??????? int i = 0;
??????? int j = 0;
??????? public void Sale()
??????? {
??????????? while (num>0)
??????????? {
??????????????? lock (this)
??????????????? {
??????????????????? if (num > 0)
??????????????????? {
??????????????????????? Thread.Sleep(5);
??????????????????????? num = num - 1;
??????????????????????? Console.WriteLine(Thread.CurrentThread.Name + "售出一本!");
??????????????????????? if (Thread.CurrentThread.Name=="張三")
??????????????????????? {
??????????????????????????? i++;
??????????????????????? }
??????????????????????? else
??????????????????????? {
??????????????????????????? j++;
??????????????????????? }
??????????????????? }
??????????????????? else
??????????????????? {
??????????????????????? Console.WriteLine(Thread.CurrentThread.Name + "沒有了!");
??????????????????????? Console.WriteLine("李四售出{0}本,張三售出{1}本!",j,i);
??????????????????????? if (i > j)
??????????????????????? {
??????????????????????? Console.ForegroundColor = ConsoleColor.Magenta;
??????????????????????????? Console.WriteLine("李四是笨笨!");
??????????????????????????? Console.ResetColor();
??????????????????????? }
??????????????????????? else
??????????????????????? {
??????????????????????????? Console.WriteLine("張三是笨笨!");
??????????????????????? }
??????????????????? }
??????????????? }
??????????? }
??????? }
??? }
7、TCP/IP:網絡通訊協議,由網絡層的IP協議和傳輸層的TCP協議組成的,是供已連接因特網的計算機進行通信的通信協議。
8、在.net中,我們用TCPClient和TCPListener類來實現點對點通訊,命名空間位于System.Net.Sockets
????? TcpListener類提供一些簡單方法,用于在阻止同步模式下偵聽和接受傳入連接請求。可以使用TcpClient和Socket來連接TcpListener。可使用IPEndPoint、本地IP地址及端口號或者僅使用端口號,來創建TcpListener。
????? TcpClient類提供的一些簡單方法,用于在同步阻止模式下通過網絡來連接、發送、和接收流數據。
以一個簡單控制臺聊天機器人為例:
服務端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
namespace Server
{
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? Console.WriteLine("server");
??????????? TcpListener server = new TcpListener(IPAddress.Parse("***.***.***.***"), 9999);????????????
??????????????????????? //服務端的IP地址
??????????? server.Start();
??????????? TcpClient clinet = server.AcceptTcpClient();
??????????? NetworkStream netstream = clinet.GetStream();
??????????? Thread th = new Thread(ReadText);
??????????? th.Start(netstream);
??????????? StreamWriter swriter = new StreamWriter(netstream);
??????????? while (true)
??????????? {
??????????????? Console.WriteLine("---------------------------");
??????????????? string con = Console.ReadLine();
??????????????? swriter.WriteLine(con);
??????????????? swriter.Flush();
??????????????? Console.WriteLine("服務:" + DateTime.Now);
??????????????? Console.WriteLine("---------------------------");
??????????? }
??????? }
??????? static void ReadText(object o)
??????? {
??????????? NetworkStream netstream = o as NetworkStream;
??????????? StreamReader sr = new StreamReader(netstream);
??????????? while (true)
??????????? {
??????????????? Console.WriteLine("---------------------------");
??????????????? string con = sr.ReadLine();
??????????????? Console.WriteLine(con);
??????????????? Console.WriteLine("客戶:" + DateTime.Now);
??????????????? Console.WriteLine("---------------------------");
??????????? }
??????? }
??? }
}
客戶端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace Client
{
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? Console.WriteLine("client");
??????????? TcpClient client = new TcpClient("***.***.***.***", 9999);???? //服務端的IP地址
??????????? NetworkStream netstream = client.GetStream();
??????????? StreamWriter swriter = new StreamWriter(netstream);
??????????? Thread th = new Thread(ReadText);
??????????? th.Start(netstream);
??????????? while (true)
??????????? {
??????????????? Console.WriteLine("---------------------------");
??????????????? string con = Console.ReadLine();????????????
??????????????? swriter.WriteLine(con);
??????????????? swriter.Flush();
??????????????? Console.WriteLine("客戶:" + DateTime.Now);
??????????????? Console.WriteLine("---------------------------");
??????????? }
??????? }
??????? static void ReadText(object o)
??????? {
??????????? NetworkStream netstream = o as NetworkStream;
??????????? StreamReader sr = new StreamReader(netstream);
??????????? while (true)
??????????? {
??????????????? string con = sr.ReadLine();
??????????????? Console.WriteLine("---------------------------");
??????????????? Console.WriteLine(con);
??????????????? Console.WriteLine("服務:" + DateTime.Now);
??????????????? Console.WriteLine("---------------------------");
??????????? }
??????? }
??? }
}
???? 這是一個一對一的聊天程序,大家可以結合以前學過的知識實現多對多的聊天程序。
本文出自 “大懶丫頭” 博客,請務必保留此出處http://lanyatou.blog.51cto.com/3306130/624863
總結
以上是生活随笔為你收集整理的.NET Framework基础知识(二)(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ArcGIS Engine开发:框架/结
- 下一篇: asp.net ajax控件工具集 Au