Title: .NET Framework Class Library (FCL) .NET 1.0
1.NET Framework Class Library(FCL) .NET 1.0
2Fobb tulajdonságok
- Objektum orientált API.
- Egységes fejlesztoi könytár.
- Több, mint 7000 típus(osztály, struktúra,
interfész, felsorolt, delegátum). - Hierarchikusan szervezett névterek (kb. 100).
- C - using, VB imports.
3Esemény vezérelt
- A program vár, hogy egy esemény bekövetkezzen,
amit lekezel. - Firing an event eseményt generál az objektum
- Listener objektum, ami vár az eseményre
- Event handler módszer, amely lekezeli az
eseményt
4Kategóriák
- 100 névtér
- I/O (file, stream)
- Collection (hash táblák, din. tömbök)
- Reguláris kifejezések
- Internet
- Adatbázis
- Reflekció
- Diagnosztika
- Szálkezelés
5IO - Fobb jellemzok
- System.IO 30 osztály, 1 struktúra, 3 delegátum,
7 enum - BinaryReader, BinaryWriter, Directory, File,
FileInfo, FileStream, IOException, MemoryStream,
Path, Stream, StreamWriter, StreamReader,
TextReader, TextWriter
6File rendszer fv.-ek
- FileSystemInfo (absztrakt), csak példány fv.-ek
- DirectoryInfo
- FileInfo
- Directory (statikus fv.-ek)
- File (statikus fv.-ek)
- PathSztringeken manipulál, amelyek fájlra, vagy
jegyzékre irányulnak. Nem kell hogy létezzen a
cél.
7Példa File rendszer
- DirectoryInfo dir new DirectoryInfo(Directory.G
etCurrentDirectory()) - Console.WriteLine( "Current Dir 0", dir.FullNam
e) - foreach (FileInfo f in dir.GetFiles())
- Console.WriteLine("0,-141,102,20",
f.Name, f.Length, f.LastWriteTime) -
- Process p Process.GetCurrentProcess()
- ProcessModule pm p.MainModule
- string s pm.ModuleName
- Console.WriteLine( Path.GetFullPath(s) )
- Console.WriteLine( Path.GetFileName(s) )
- Console.WriteLine( Path.GetFileNameWithoutExtensio
n(s)) - Console.WriteLine(Path.GetDirectoryName(Directory.
GetCurrentDirectory())) - Console.WriteLine(Path.GetPathRoot(Directory.GetCu
rrentDirectory())) - Console.WriteLine( Path.GetTempPath() )
- Console.WriteLine( Path.GetTempFileName() )
-
8IO - Tipikus jegyzokönyv
- Nyissuk meg a folyamot a FileStream osztály
segítségével.
Bináris BinaryReader, BinaryWriter osztályok
valamelyike Read, Write fv.
Szöveges StreamReader, StreamWriter osztályok
valamelyike ReadLine, WriteLine fv.
9IO - Példa
- static void Main(string args)
-
- StreamReader reader null
- try
-
- reader new StreamReader(args0)
- for(string line reader.ReadLine() line !
null - line reader.ReadLine())
-
- Console.WriteLine(line)
-
-
- catch(IOException e)Console.WriteLine(e.Message)
- finally if (reader ! null) reader.Close()
10Sorosítás
- IRemotingFormatter-t implementáló osztályok
(RPC) - SoapFormatter
- BinaryFormatter
- Lementés - Serialize
- Feltöltés Deserialize
- Attribútumok
- Serializable()
- NonSerialized()
11Példa - sorosítás
- using System.Runtime.Serialization
- using System.Runtime.Serialization.Formatters.Soap
- using System.Runtime.Serialization.Formatters.Bina
ry - public class Test
- public static void Main()
- TestSimpleObject obj new
TestSimpleObject() - Console.WriteLine("Before serialization
") obj.Print() - Stream stream File.Open("data.xml",
FileMode.Create) - SoapFormatter formatter new
SoapFormatter() - BinaryFormatter formatter new
BinaryFormatter() - formatter.Serialize(stream, obj)
stream.Close() - obj null
- stream File.Open("data.xml",
FileMode.Open) - formatter new SoapFormatter()
formatter new BinaryFormatter() - obj (TestSimpleObject)formatter.Deserializ
e(stream) - stream.Close()
- Console.WriteLine("After deserialization
") obj.Print() -
-
12Példa sorosítás II
- Serializable()
- public class TestSimpleObject
- public int member1 public string member2
public double member3 - NonSerialized() public string member4
- public TestSimpleObject()
- member1 11
- member2 "hello"
- member3 3.14159265
- member4 "hello world!"
-
- public void Print()
- Console.WriteLine("member1 '0'",
member1) - Console.WriteLine("member2 '0'",
member2) - Console.WriteLine("member3 '0'",
member3) - Console.WriteLine("member4 '0'",
member4) -
-
13Kategóriák
- 100 névtér
- I/O (file, stream)
- Collection (hash táblák, din. tömbök)
- Reguláris kifejezések
- Internet
- Adatbázis
- Reflekció
- Diagnosztika
- Szálkezelés
14Collection - Fobb jellemzok
- Bármilyen típus eltárolható benne (System.Object)
- Fobb osztályai ArrayList, Hashtable, Stack, és
Queue - C-ban template-ek (STL)
- .NET 2.0-tól - Generics
15Collection - Hash tábla
- Párokban tárolja az adatokat kulcs érték
- Gyors keresés, egyedi kulcsok
- Beillesztés Add fv., operátor
- Bejárásforeach(DictionaryEntry entry in table)
- Console.WriteLine("Kulcs0 Érték1",
entry.Key, entry.Value) - Törlés Remove, Clear fv.-ek
16Collection - Tömb
- Array osztály, statikus primitív típusokra
- 6 tulajdonság IsFixedSize, IsReadOnly,
IsSynchronized, Lenght, Rank, SyncRoot - 22 fv.
- Implementál több interfészt is.Pl.az IList-et
add, clear, insert, remove, ...
17Collection - példa
- public class SamplesArrayList
- public static void Main()
- ArrayList myAL new ArrayList()
- myAL.Add("Hello") myAL.Add("World")
myAL.Add("!") - Console.WriteLine( "myAL" )
- Console.WriteLine( "\tCount 0",
myAL.Count ) - Console.WriteLine( "\tCapacity 0",
myAL.Capacity ) - Console.Write( "\tValues" )
PrintValues( myAL ) -
- public static void PrintValues( IEnumerable
myList ) - System.Collections.IEnumerator myEnumerator
myList.GetEnumerator() - while ( myEnumerator.MoveNext() )
- Console.WriteLine( "\t0", myEnumerator.Curren
t ) -
18Kategóriák
- 100 névtér
- I/O (file, stream)
- Collection (hash táblák, din. tömbök)
- Reguláris kifejezések
- Internet
- Adatbázis
- Reflekció
- Diagnosztika
- Szálkezelés
19Reguláris kif. - Fobb jellemzok
- PERL 5.0 kompatibilis! (.NET 1.0)
- System.Text.RegularExpression névtér8 osztály, 1
delegátum,1 felsorolt típus - RegEx osztály
- Használata
- HTML elemzése
- sztringeket részsztringekre bontása
- egyezo minták keresése
- részsztring keresés/csere
20Reguláris kif. - példa
- Regex r new Regex("(-)")
- string s r.Split("one-two-banana")
- Html elemzéshez használjuk a
- RegEx regex new RegEx(ltgtgt)
21Reguláris kif. példa
- class RegExSample
- static string CapText(Match m)
- string x m.ToString()
- if (char.IsLower(x0))
- return char.ToUpper(x0) x.Substring(1,
x.Length-1) -
- return x
-
- static void Main()
- string text "four score and seven years
ago" - System.Console.WriteLine("text" text
"") - string result Regex.Replace(text, _at_"\w",
- new MatchEvaluator(RegExSample.CapText))
- System.Console.WriteLine("result"
result "") -
-
22Kategóriák
- 100 névtér
- I/O (file, stream)
- Collection (hash táblák, din. tömbök)
- Reguláris kifejezések
- Internet
- Adatbázis
- Reflekció
- Diagnosztika
- Szálkezelés
23Internet - Fobb jellemzok
- System.Net névtér36 osztály, 5 interfész, 1
delegátum,4 felsorolt típus - Fontosabb osztályokCookie, WebClient,
WebException, WebProxy, SocketAddress, - Minden elterjedt protokollt támogat.
- WebRequest és WebResponse az alap.
24Internet - példa - WebClient
- public class Test
- public static void Main (string args)
- if (args null args.Length 0)
- throw new ApplicationException
("Specify the URI of the resource to retrieve.") -
- WebClient client new WebClient ()
- client.Headers.Add ("user-agent",
"Mozilla/4.0 (compatible MSIE 6.0 Windows NT
5.2 .NET CLR 1.0.3705)") - Stream data client.OpenRead (args0)
- StreamReader reader new StreamReader
(data) - string s reader.ReadToEnd ()
- Console.WriteLine (s)
- data.Close ()
- reader.Close ()
-
-
25System.Net.Sockets.TcpClient
- static void Connect(String server, String
message) - try
- Int32 port 13000
- TcpClient client new TcpClient(server,
port) - Byte data System.Text.Encoding.ASCII.GetBy
tes(message) - NetworkStream stream client.GetStream()
- stream.Write(data, 0, data.Length)
- Console.WriteLine("Sent 0", message)
- data new Byte256
String responseData String.Empty - Int32 bytes stream.Read(data, 0,
data.Length) - responseData System.Text.Encoding.ASCII.GetS
tring(data, 0, bytes) - Console.WriteLine("Received 0",
responseData) - client.Close()
- catch (ArgumentNullException e)
Console.WriteLine("ArgumentNullException 0",
e) - catch (SocketException e) Console.WriteLine("S
ocketException 0", e)
26WebRequest - WebResponse
- // Initialize the WebRequest.
- WebRequest myRequest WebRequest.Create("http//w
ww.contoso.com") - // Return the response.
- WebResponse myResponse myRequest.GetResponse()
- // Code to use the WebResponse goes here.
- // Close the response to free resources.
- myResponse.Close()
27System.Web
- ASP.NET Web alkalmazásokhoz, XML Web
szervizekhez - System.Web osztályok, interfészek
böngészo/server kommunikációhoz. HTTP kimenetet
produkál (HttpResponse), olvassa HTTP kérést
(HttpRequest), . osztályok, amelyek kezelik,
használják a cookie-kat, fájl átvitelt,
kivételeket, ... - System.Web.UI Web Form oldalakat készíthetünk,
(Page) - System.Web.UI.HtmlControls HTML specifikus
kontrollok Web formokhoz. - System.Web.UI.WebControls ASP.NET Web szerver
kontrollok. - System.Web.Services - XML Web szervizekhez.
28Levelezés - asp
- MailMessage mess new MailMessage()
- mess.From valaki_at_valahonnan.com
- mess.To
- mess.Subject
- mess.Body
- MailAttachment MyAttachment new
MailAttachment(sSubstr) - mess.Attachments.Add(MyAttachment)
- SmtpMail.SmtpServer localhost
- SmtpMail.Send()
29Kategóriák
- 100 névtér
- I/O (file, stream)
- Collection (hash táblák, din. tömbök)
- Reguláris kifejezések
- Internet
- Adatbázis
- Reflekció
- Diagnosztika
- Szálkezelés
30Adatdbázis - Fobb jellemzok
- System.Data névtér
- Támogatott forrásokODBC, ADO, DAO, RDO, OLEDB
- Fobb osztályokConnection, DataReader, DataSet,
DataAdapter, SqlException
31Adat lekérdezésSqlDataReader
- System.Data.SqlClient névtér
- Létrehozzuk, használjuk az objektumot, majd
lezárjuk a Close fv.-el. - Eredmények lekérdezése
- GetBoolean, GetChar, GetDouble, ...
- Melyek paramétere az oszlop sorszáma (0 indexu)
- InvalidCastException, ha nem konvertálható
implicit. - Elotte hívjuk meg a IsDBNull fv.-t!
- RecordsAffected tulajdonság értéke csak a lezárás
után érvényes! - Lepecsételt, nem lehet származtatni!
32PéldaSqlDataReader
- public void ReadMyData(string myConnString)
- string mySelectQuery "SELECT OrderID,
CustomerID FROM Orders" - SqlConnection myConnection new
SqlConnection(myConnString) - SqlCommand myCommand new SqlCommand(mySelect
Query,myConnection) - myConnection.Open()
- SqlDataReader myReader
- myReader myCommand.ExecuteReader()
- // Always call Read before accessing data.
- while ( myReader.Read() )
- Console.WriteLine( myReader.GetInt32(0)
", " myReader.GetString(1)) -
- myReader.Close() // always call Close when
done reading. - myConnection.Close() // Close the connection
when done with it. -
33SqlCommand
- SQL utasítás, vagy tárolt elj. futtathatunk.
- Lepecsételt, nem lehet származtatni!
- Parancs futtatása
- ExecuteReader több soros lekérdezés
- ExecuteNonQuery INSERT, DELETE, UPDATE,
SETDataSet nélküli - ExecuteScalar egyszeru típusraLefuttatja az
utasítást, és visszatér az elso sor elso
oszlopával. - ExecuteXmlReader CommandText -gt XmlReaderAz
eredmény XML-ben jön vissza.
34PéldaSqlCommand
- public void CreateMySqlCommand(string
myExecuteQuery, SqlConnection myConnection) -
- SqlCommand myCommand new SqlCommand(myExecut
eQuery, myConnection) - myCommand.Connection.Open()
- int AffectedRows myCommand.ExecuteNon
Query() - myConnection.Close()
-
35PéldaExecuteXmlReader
- public void CreateMyXmlReader(string myXmlQuery,
SqlConnection myConnection) - SqlCommand myCommand new SqlCommand(myXmlQue
ry, myConnection) - try
- myConnection.Open()
- System.Xml.XmlReader myXmlReader
myCommand.ExecuteXmlReader() - myXmlReader.Close() // Always close the
XmlReader when finished. -
- catch(Exception e)
- System.Diagnostics.EventLog log new
System.Diagnostics.EventLog() - log.Source "My Application"
- log.WriteEntry(e.ToString())
- Console.WriteLine("Exception of type 0
occurred.", e.GetType()) - finally myConnection.Close()
-
36Példakivételkezelés - tranzakciók
- SqlTransaction myTrans myCommand.Transaction
myTrans - try myCommand.ExecuteNonQuery()
myTrans.Commit() - catch(Exception e)
- try myTrans.Rollback()
- catch (SqlException ex)
- if (myTrans.Connection ! null)
- Console.WriteLine("An exception of type
" ex.GetType() - " was encountered
while attempting to roll back the
transaction.") -
-
- Console.WriteLine("An exception of type "
e.GetType() - " was encountered while
inserting the data.") - Console.WriteLine("Neither record was
written to database.") -
- finally myConnection.Close()
37Változó paraméterek használata
- Prepare fv. hívása, utána execute.
- Elotte be kell állítani a paramétereket
- Értékét
- Szerver oldali nevét
38PéldaPrepare
- int id 20
- string desc "myFirstRegion"
- SqlConnection rConn new SqlConnection("Pers
ist Security InfoFalseIntegrated
SecuritySSPIdatabasenorthwindservermySQ
LServer") - rConn.Open()
- SqlCommand command new SqlCommand(null,
rConn) - command.CommandText "insert into Region
(RegionID, RegionDescription) values (_at_id,
_at_desc)" - command.Parameters.Add ( "_at_id", id)
- command.Parameters.Add ( "_at_desc", desc)
- command.Prepare() // Calling Prepare after
having set the Commandtext and parameters. - command.ExecuteNonQuery()
- command.Parameters0.Value 21
- command.Parameters1.Value
"mySecondRegion" - command.ExecuteNonQuery()
39DataSet
- ADO .NET fo komponense
- Az adatbázis pufferelt mása a memóriábanDataTable
objektumok gyujteménye, lehet közöttük
kapcsolat. - Írható, olvasható
- XML sémájú
- HTTP-n keresztül valósul meg a kapcsolat
- A séma betöltheto XML-bol, lementheto XML-be
40DataAdapter
- Híd a DataSet és az adatforrás között.
- Fill feltölti a DataSet-et az adatforrás alapján
- Update frissíti az adatforrást a DataSet alapján
- Microsoft SQL esetén használjuk az SqlDataAdapter
41PéldaDataAdapter
- public DataSet CreateCmdsAndUpdate(DataSet
myDataSet,string myConnection,string
mySelectQuery,string myTableName) -
- OleDbConnection myConn new
OleDbConnection(myConnection) - OleDbDataAdapter myDataAdapter new
OleDbDataAdapter() - myDataAdapter.SelectCommand new
OleDbCommand(mySelectQuery, myConn) - OleDbCommandBuilder custCB new
OleDbCommandBuilder(myDataAdapter) - myConn.Open()
- DataSet custDS new DataSet()
- myDataAdapter.Fill(custDS)
- //code to modify data in dataset here
- myDataAdapter.Update(custDS)
- myConn.Close()
- return custDS
-
42Példa - DataSet
- SqlConnection myConn new SqlConnection(cString)
- SqlDataAdapter myAdapter new SqlDataAdapter()
- myAdapter.TableMappings.Add("Table",
"Suppliers") - myConn.Open()
- SqlCommand myCmd new SqlCommand("SELECT FROM
Suppliers", myConn) - myAdapter.SelectCommand myCmd
- ds new DataSet("Customers")
- myAdapter.Fill(ds)
- SqlDataAdapter adpProducts new
SqlDataAdapter() - adpProducts.TableMappings.Add("Table",
"Products") - SqlCommand cmdProd new SqlCommand("SELECT
FROM Products", myConn) - adpProducts.SelectCommand cmdProd
- adpProducts.Fill(ds)
myConn.Close() - System.Data.DataRelation dr
- System.Data.DataColumn dc1, dc2
- dc1 ds.Tables"Suppliers".Columns"SupplierID"
- dc2 ds.Tables"Products".Columns"SupplierID"
- dr new System.Data.DataRelation("suppliers2produ
cts", dc1, dc2) - ds.Relations.Add(dr)
43Kategóriák
- 100 névtér
- I/O (file, stream)
- Collection (hash táblák, din. tömbök)
- Reguláris kifejezések
- Internet
- Adatbázis
- Reflekció
- Diagnosztika
- Szálkezelés
44Reflekció fobb jellemzok
- System.Reflection névtér
- Információ osztályok MethodInfo,
ConstructorInfo, MemberInfo,
45Példa assembly fv.-ei
- using System
- using System.Reflection
- public class LoadInvoke
- public static void Main(string args)
- Assembly a Assembly.LoadFrom(args0)
- Type mytypes a.GetTypes()
- BindingFlags flags (BindingFlags.NonPubl
ic BindingFlags.Public - BindingFlags.Static
BindingFlags.Instance BindingFlags.DeclaredOn
ly) - foreach(Type t in mytypes)
- MethodInfo mi t.GetMethods(flags)
- Object obj Activator.CreateInstance(
t) - foreach( MethodInfo m in mi)
m.Invoke(obj, null) -
-
46Példa - assembly
- Assembly SampleAssembly
- SampleAssembly Assembly.LoadFrom("c\\Sample.Ass
embly.dll") - MethodInfo Method SampleAssembly.GetTypes()0.G
etMethod("Method1") - ParameterInfo Params Method.GetParameters()
- // Display information about method parameters.
- // Param sParam1
- // Type System.String
- // Position 0
- // OptionalFalse
- foreach (ParameterInfo Param in Params)
-
- Console.WriteLine("Param"
Param.Name.ToString()) - Console.WriteLine(" Type"
Param.ParameterType.ToString()) - Console.WriteLine(" Position"
Param.Position.ToString()) - Console.WriteLine(" Optional"
Param.IsOptional.ToString()) -
47Kategóriák
- 100 névtér
- I/O (file, stream)
- Collection (hash táblák, din. tömbök)
- Reguláris kifejezések
- Internet
- Adatbázis
- Reflekció
- Diagnosztika
- Szálkezelés
48Diagnosztika fobb tulajdonságok
- System.Diagnostic névtér
- EventLogOlvashatunk írhatunk a redszer
eseményeket. - ProcessFutó processzeket monitorozhatjuk.
- PerformanceCounterA helyi vagy távoli rendszert
monitorozhatjuk. - Debug, Trace Hibakeresés, nyomkövetés
49PéldaEventLog
- using System
- using System.Diagnostics
- using System.Threading
- class MySample
- public static void Main()
- // Create the source, if it does not
already exist. - if(!EventLog.SourceExists("MySource"))
- EventLog.CreateEventSource("MySource",
"MyNewLog") - Console.WriteLine("CreatingEventSource
") -
- // Create an EventLog instance and assign
its source. - EventLog myLog new EventLog()
- myLog.Source "MySource"
- myLog.WriteEntry("Writing to event log.")
-
-
50Példa - diagnosztika
- using Systemusing System.Diagnostics using
System.ComponentModel - const int ERROR_FILE_NOT_FOUND 2 const int
ERROR_ACCESS_DENIED 5 - public void PrintDoc()
- Process myProcess new Process()
- try
- string myDocumentsPath
- Environment.GetFolderPath(Environment
.SpecialFolder.Personal) - myProcess.StartInfo.FileName
myDocumentsPath "\\MyFile.doc" - myProcess.StartInfo.Verb "Print"
- myProcess.StartInfo.CreateNoWindow
true - myProcess.Start()
-
- catch (Win32Exception e)
- if(e.NativeErrorCode
ERROR_FILE_NOT_FOUND) Console.WriteLine(e.M
essage ". Check the path.") - else if (e.NativeErrorCode
ERROR_ACCESS_DENIED) Console.WriteLine(e.Mes
sage ". Nincs jog") -
-
51Példa diagnosztika II
- try
- Process myProcess
- myProcess Process.Start("Notepad.exe
") - // Display physical memory usage 5
times at intervals of 2 seconds. - for (int i 0i lt 5 i)
- if (!myProcess.HasExited)
- myProcess.Refresh()
- // Print working set to
console. - Console.WriteLine("Physical
Memory Usage " -
myProcess.WorkingSet.ToString()) - Thread.Sleep(2000)
- else break
-
- myProcess.CloseMainWindow()
- myProcess.Close()
- catch(Exception e) Console.WriteLine(e.
Message)
52Példa - debug
- public static int Main(string args)
- Debug.Listeners.Add(new TextWriterTraceListener
(Console.Out)) - Debug.AutoFlush true
- Debug.Indent()
- Debug.WriteLine("Entering Main")
- Console.WriteLine("Hello World.")
- Debug.WriteLine("Exiting Main")
- Debug.Unindent()
- return 0
-
- public static void MyMethod(Type type, Type
baseType) - Debug.Assert(type ! null, "Type parameter is
null", - "Can't get object for null type")
-
53Példa - trace
- static TraceSwitch mySwitch new
TraceSwitch("General", "Entire Application") - static public void MyMethod()
- // Write the message if the TraceSwitch level
is set to Error or higher. - if(mySwitch.TraceError)
- Console.WriteLine("My error message.")
-
- // Write the message if the TraceSwitch level
is set to Verbose. - if(mySwitch.TraceVerbose)
- Console.WriteLine("My second error
message.") -
-
- public static void Main(string args)
- // Run the method that prints error messages
based on the switch level. - MyMethod()
-
54Kategóriák
- 100 névtér
- I/O (file, stream)
- Collection (hash táblák, din. tömbök)
- Reguláris kifejezések
- Internet
- Adatbázis
- Reflekció
- Diagnosztika
- Szálkezelés
55Szálak fobb tulajdonságok
- System.Threading névtér
- Szálkezelo fv.-ek
- Start
- Abort (AbortException)
- Interrupt
- Suspend
- Join
- Sleep (statikus)
56Példa - szálkezelés
- using System using System.Threading
- public static void ThreadProc()
- for (int i 0 i lt 10 i)
- Console.WriteLine("Thread 0",
i) Thread.Sleep(100) -
-
- public static void Main()
- Console.WriteLine("Main thread Start a
second thread.") - Thread t new Thread( new ThreadStart
(ThreadProc)) - t.Start()
- for (int i 0 i lt 4 i)
- Console.WriteLine("Main thread Do
some work.") Thread.Sleep(200) -
- Console.WriteLine("Main thread Call
Join(), ThreadProc ends.") - t.Join()
- Console.WriteLine("Main thread Press
Enter to end program.") - Console.ReadLine()
-
57Példa Get/SetData
- class Test
-
- static void Main()
-
- Thread newThreads new Thread4
- for(int i 0 i lt newThreads.Length
i) - newThreadsi new Thread(
- new ThreadStart(Slot.SlotTest))
- newThreadsi.Start()
-
-
-
58Példa Get/SetData II
- class Slot
- static Random randomGenerator static
LocalDataStoreSlot localSlot - static Slot()
- randomGenerator new Random()
- localSlot Thread.AllocateDataSlot()
-
- public static void SlotTest()
- Thread.SetData(localSlot,
randomGenerator.Next(1, 200)) - Console.WriteLine("Data in thread_0's
data slot 1,3", - AppDomain.GetCurrentThreadId().ToSt
ring(), - Thread.GetData(localSlot).ToSt
ring()) - Thread.Sleep(1000) // legyen ideje a
szálaknak beírni - Console.WriteLine("Data in thread_0's
data slot 1,3", - AppDomain.GetCurrentThreadId().ToSt
ring(), - Thread.GetData(localSlot).ToString(
)) -
-
59Példa mutex
- class Test
- private static Mutex mut new Mutex()
- private const int numIterations 1
- private const int numThreads 3
- static void Main()
- // szálak létrehozása
- for(int i 0 i lt numThreads i)
-
- Thread myThread new Thread(new
ThreadStart(MyThreadProc)) - myThread.Name String.Format("Thread0",
i 1) - myThread.Start()
- // fo szál kilép, csak a fonalak futnak
-
60Példa mutex II
- private static void MyThreadProc()
- for(int i 0 i lt numIterations i)
UseResource() -
- // A szinkronizált eroforrást szimulálja
- private static void UseResource()
-
- mut.WaitOne() // VÁRAKOZUNK ABELÉPÉSRE
- Console.WriteLine("0 has entered the
protected area", - Thread.CurrentThread.Name)
- Thread.Sleep(500) // SZIMULÁLJUK AMELÓT
- Console.WriteLine("0 is leaving the protected
area\r\n", - Thread.CurrentThread.Name)
- mut.ReleaseMutex() // ELENGEDJÜK A MUTEX-ET
-