Grafikus felhasználói felület 3.

Hasonló dokumentumok
C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

Kölcsönös kizárás, atomicitás, szemafor.

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Szoftvertechnológia alapjai Java előadások

BME MOGI Gépészeti informatika 4.

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

Bánsághi Anna

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

.NET Microsoft.Net Framework

Programozási nyelvek és módszerek Java Thread-ek

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Concurrency in Swing

OOP és UML Áttekintés

A szerzõrõl... xi Bevezetés... xiii

Szoftvertechnolo gia gyakorlat

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

Generikus Típusok, Kollekciók

8.4 Többszálú alkalmazások készítése

C#, OOP. Osztályok tervezése C#-ban

Szoftvertechnológia alapjai Java előadások

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

JAVA SE/ME tanfolyam tematika

BME MOGI Gépészeti informatika 14.

Form1 Form Size 400;400 Text Mozgó kör timer1 Timer Enabled True Interval 100

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

9. MPI

Java programozási nyelv 6. rész Java a gyakorlatban

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Objektumorientált programozás C# nyelven

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Java és web programozás

Konkurens TCP Szerver

Segédanyag: Java alkalmazások gyakorlat

.NET alapszolgáltatások 2.

Informatika terméktervezőknek

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

BME MOGI Gépészeti informatika 15.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Access adatbázis elérése OLE DB-n keresztül

BME MOGI Gépészeti informatika 8.

JNDI - alapok. Java Naming and Directory Interface

Tervminták a valósidejű gyakorlatban

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Programozási technológia 2.

Objektumorientált programozás C# nyelven III.

Mérési adatgyűjtés és adatfeldolgozás 2. előadás

Bánsághi Anna

INFORMATIKAI ALAPISMERETEK

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

Osztályok. 4. gyakorlat

Eseményvezérelt alkalmazások fejlesztése II 3. előadás. Windows Forms dinamikus felhasználói felület, elemi grafika

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Tartalomjegyzék. Előszó... 10

A Java nyelv. Dialógus ablakok. Elek Tibor

Programozási nyelvek Java

Java Programozás 11. Ea: MVC modell

VISUAL BASIC ALAPISMERETEK

BME MOGI Gépészeti informatika 13.

Entity Framework alapú adatbáziselérés

Osztálytervezés és implementációs ajánlások

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Osztálytervezés és implementációs ajánlások

OOP #14 (referencia-elv)

Operációs rendszerek. Az NT folyamatok kezelése

INFORMATIKAI ALAPISMERETEK

Dr. Sipos Marianna ZMNE BJKMK

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

OOP: Java 8.Gy: Abstract osztályok, interfészek

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Entity Framework alapú adatbáziselérés

Magas szintű programozási nyelvek 2 Előadás jegyzet

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Párhuzamosság. Java a párhuzamosítást több féle képpen támogatja.

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

4. Öröklődés. Programozás II

Objektumorientált programozás C# nyelven

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Kalapácsvetés 2016 szöveges

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Hálózatkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Hálózatkezelés / 20

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

C# feladatok gyűjteménye

Komponens alapú fejlesztés

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

C# osztályok. Krizsán Zoltán

Átírás:

1.oldal Grafikus felhasználói felület 3. Képek kezelése - PictureBox - létrehozás, rajzolás - mentés, betöltés Tegyünk fel egy PictureBoxot Ehhez hozzá tudunk rendelni egy img propertyn egy képet, de mi kódból csinájuk! picturebox1.image = new Bitmap(pictureBox1.Width, picturebox1.height); létrehozható üresen, vagy Szélesség magasság, vagy fileból, steamból Üres! Nem rajzoltunk rá! Graphics = grafika rajzoljunk rá tollal egy vonalat, szín :fekete Image img = new Bitmap(pictureBox1.Width, picturebox1.height); Graphics g = Graphics.FromImage(img); g.drawline(new Pen(Color.Black), 0, 0, img.width, img.height); picturebox1.image = img; Fileba mentés: img.save ("útvonal") formátum :Jpeg Betölteni:Img.FromFile("útvonal") Újabb image- régit ki kell törölni, mert a GC nem veszi rögtön ki és foglalja a memóriát. Hívjunk Disposet img.save("x.png", System.Drawing.Imaging.ImageFormat.Png); //Image.FromFile("c:\\dotnet\\x.png"); Gombnyomásra betallózni a kép (útvnalát): using, hogy felszabaduljon, mikor lecsukjuk; showdialog; openfiledialog using (OpenFileDialog openfiledialog = new OpenFileDialog()) if (openfiledialog.showdialog() == DialogResult.OK) MessageBox.Show(openFileDialog.FileName); Szűrő: open FileDialog.Filer

2.oldal Dupla pufferelés Mire jó: a képet programmal rajzoljuk, akkor folyamatosan frissíteni kell, és újra megjeleníteni a képen. Ezért egy másik helyen rajzoljuk meg inkább, és csak a végeredményt jelenítjük meg. Ez sokkal gyorsabb lesz, nem fog az állandó frissítés miatt villogni a kép, és a gépet sem terheli. Új Form using hogy felszabaduljon, mikor lecsukjuk modálisan megjelenítjük a dialógust pl: Sok vonalat akarok kirajzolni a Formra! Legyen a szín: r g b, koordináta: x1,x2,y1,y2, random! gr Pen Graphics gr = e.graphics; Random rnd = new Random(); for (int i = 0; i < 10000; i++) int r = rnd.next(255); int g = rnd.next(255); int b = rnd.next(255); int x1 = rnd.next(this.width); int x2 = rnd.next(this.width); int y1 = rnd.next(this.height); int y2 = rnd.next(this.height); gr.drawline(new Pen(Color.FromArgb(r, g, b)), x1, y1, x2, y2); Lassú a kirajzolás! Vibrál a képernyő! Kirajzolja ablakot, majd feltöltődik - sok idő frissít a képernyő fehér háttérrel, majd megint kiírja. Jobb lenne hátsó pufferben összeállítani a képet és egybe kirakni. Dupla Pufferelés. A kész kép nem vibrál. DoubleBuffer=TRUE És még gyorsabb is. Nem minden vonallal a videokártyának szól. - régen: pl. SetStyle(ControlStyles.ResizeRedraw ControlStyles.DoubleBuffer ControlStyles.UserPaint ControlStyles.AllPaintingInWmPaint, true); Ha.Net 1 akkor ilyen hosszú a kód, de mi.net 2 es 1 property átállítása. using (frmdoublebuffer frm = new frmdoublebuffer()) frm.showdialog();

3.oldal Szálkezelés Thread-ek Már volt BackgroundWorker és egy példa workedthread: OkosHatterMuveletHashKodszamito +++ if (workerthread == null) workerthread = new Thread(new ThreadStart (OkosHatterMuveletesHashKodszamito)); workerthread.start(); +++ (using System.Threading;) Szálindítás: Start queuereader.start(); Szál megállítás: Abort, vagy Join- bevárni hogy a szál leálljon. Felfüggesztés és folytatás: firstthread.suspend(); firstthread.resume(); Felfüggesztés adott ideig: Thread.Sleep (Int32) Szinkronizáció Szinronizáció legprimitívebb módszere : Busy Waiting amíg nem kap üzenetet addig végtelen ciklus fut, újra és újra ellenőrzi volt-e üzenet. Rossz. Nem hatékony. Ha többen akarnak egyszerre üzenni akkor ez nem is jó. Megoldás: szemafor változó (~sorompó) : ha fel van engedve lehet üzenni, ha valaki használja akkor leengedi és addig a többiek nem férnek hozzá kölcsönös kizárást biztosít, a változó elérése atomi művelet lesz. A szemafornál lehet egynél több szál is védett részben számláló. Pl: bármilyen író-olvasó rendszerben - egyszerre többen is olvashatnak

4.oldal interface ISemaphore void Initialize(int count); void ObtainResource(); void ReleaseResource(); #region New Semaphore (.NET 2.0) class NewSemaphore : ISemaphore public void Initialize(int count) sem = new Semaphore(0, int.maxvalue); public void ObtainResource() sem.waitone(); public void ReleaseResource() sem.release(1); private System.Threading.Semaphore sem; #endregion Lock és Monitor: Kritikus szakaszt készíthetünk lock segítségével egy blokkot lehet lockolni: Object thislock = new Object(); lock (thislock) // Critical code section Ez tulajdonképp ezzel ekvivalens: Monitor.Enter(x); try // Code that needs to be protected by the monitor. finally Monitor.Exit(x);

5.oldal Collection-ök szinkronizációja (.NET 1.1) 1. SyncRoot mező Icollection-ben van. Vissza kell adnia a szinkronizálásra használhato objektumot. Ezt megadjuk monitornak: // a lista egy ArrayList típusú változó lock (lista.snycroot) Foreach (int i in lista)... 2. Synchronized metódus A synchronized egy bonyolultabb(de használható) megoldás. Ezt meghívva egy gyűjteményből kapunk egy másikat aminek minden metódusát kritikus szakasz védi a konkurens hozzáféréstől. ArrayList myal; ArrayList mysyncdal = ArrayList.Synchronized( myal ); Várakozási sor implementációja - példa A WqueueEx program bemutatja a szemaforok használatát az egyik leggyakoribb többszálú modellen várakozási sor, vagy másként termelő-fogyasztó modell. A szemafort kétféle képpen valósíthatjuk meg. A modernebb.net 2.0 változat már fent szerepelt. - New Semaphore (.NET 2.0)) A.NET egy féle megoldás kissé bonyolultabb. #region OldSchool Semaphore (.NET 1.1) /// <summary> /// Semaphore implementációja /// Minden metódusa védett /// </summary> class OldSchoolSemaphore : ISemaphore private object lockobjsem; /// <summary> /// Egy új semaphore objektumot hoz létre. /// </summary> /// <param name="count">mennyi a semaphore értéke /// (felhasználható objektumok száma)</param> public void Initialize(int count)

6.oldal Count = count; lockobjsem = new object(); /// <summary> /// Ha kizárólagosan megkapja a lockobj-t, akkor addig vár, amíg nem kap /// felhasználható erőforrást. /// Konkrétan a Monitor.Wait elengedi a lock objektum lock-ját és addig vár, /// és addig vár, amíg újra vissza nem kapja. /// Ha van erőforrás, elveszi /// </summary> public void ObtainResource() lock (lockobjsem) while (Count == 0) Monitor.Wait(lockObjSem, Timeout.Infinite); Count--; /// <summary> /// Visszaadja az erőforrást. /// Jelez a Monitor.Wait-nek, hogy visszakapta a lock-ot /// </summary> public void ReleaseResource() lock (lockobjsem) Count++; Monitor.Pulse(lockObjSem); private int Count; #endregion Várakozási sor példa főprogramja: namespace WQueueEx class Program static void Producer(object queue) WaiterQueue<int> wqueue = (WaiterQueue<int>)queue; Random rnd = new Random(); while (true) wqueue.put(rnd.next(1000)); Thread.Sleep(1); static void Consumer(object queue) WaiterQueue<int> wqueue = (WaiterQueue<int>)queue; while (true)

7.oldal int val = wqueue.get(); Console.WriteLine(val); Thread.Sleep(1); static void Main(string[] args) //WaiterQueue<int> wqueue = new WaiterQueue<int>(new OldSchoolSemaphore() ); WaiterQueue<int> wqueue = new WaiterQueue<int>(new NewSemaphore()); //start Thread prodthread = new Thread(new ParameterizedThreadStart(Producer)); Thread consthread = new Thread(new ParameterizedThreadStart(Consumer)); prodthread.start(wqueue); consthread.start(wqueue); //wait Console.ReadLine(); //end prodthread.abort(); consthread.abort(); prodthread.join(); consthread.join(); Thread pool Futásra készen tart néhány szálat, hogy könnyen ell lehessen indítani ha hívás történik. (~ hálózati programoknál - Connection Pool Egy hálózati kapcsolatnál sok beállítás kell. Jó ha készenlétben tartunk nyitott kapcsolatokat, amiket gyorsan ki lehet adni.) Példa program: Mohikan webserver Timerek Ütemezéshez használhatunk időzítőket TIMER-eket. Típusai: - Winform-os - Nem Winform-os Grafikus felhasználói felület 3.... 1 Képek kezelése... 1 Dupla pufferelés... 2 Szálkezelés... 3 Thread-ek... 3 Szinkronizáció... 3 Várakozási sor implementációja - példa... 5 Thread pool... 7 A teljes jegyzet tartalomjegyzéke:... 8

8.oldal A teljes jegyzet tartalomjegyzéke:.net Framework alapjai... Error! Bookmark not defined. Fejlődés... Error! Bookmark not defined. A.NET előnyei... Error! Bookmark not defined. Implementációk... Error! Bookmark not defined. Platform Architektúra... Error! Bookmark not defined. Futtatókörnyezet (CLR)... Error! Bookmark not defined..net FrameWork szolgáltatások... Error! Bookmark not defined. Intermedaite Language -. NET assembly... Error! Bookmark not defined. BCL (Base Class Library) osztálykönyvtár... Error! Bookmark not defined. Támogatott Nyelvek... Error! Bookmark not defined. C-Sharp nyelv alapjai 1.... Error! Bookmark not defined. Egyszerű példák... Error! Bookmark not defined. Típusok... Error! Bookmark not defined. Alapvető programkonstrukciók... Error! Bookmark not defined. Osztályok... Error! Bookmark not defined. C-Sharp nyelv alapjai 2.... Error! Bookmark not defined. Öröklődés... Error! Bookmark not defined. Interface-ek... Error! Bookmark not defined. Property-k... Error! Bookmark not defined. Delegate... Error! Bookmark not defined. Exception handling... Error! Bookmark not defined. C-Sharp nyelv alapjai 3.... Error! Bookmark not defined. Attribútumok... Error! Bookmark not defined. Genericek... Error! Bookmark not defined. Kő-papír-olló játék... Error! Bookmark not defined. Reflection... Error! Bookmark not defined. Mi az az assembly?... Error! Bookmark not defined. Strong name - erős név... Error! Bookmark not defined. Betöltő (Fusion) - GAC, natív image... Error! Bookmark not defined..net alapszolgáltatások 1.... Error! Bookmark not defined. Szövegkezelés... Error! Bookmark not defined. Encoding... Error! Bookmark not defined. Beépített gyűjtemények... Error! Bookmark not defined. Saját gyűjtemények... Error! Bookmark not defined. File-ok kezelése... Error! Bookmark not defined.

9.oldal.NET alapszolgáltatások 2.... Error! Bookmark not defined. Directory-k kezelése... Error! Bookmark not defined. Dátumkezelés... Error! Bookmark not defined. Stream-ek... Error! Bookmark not defined. Futási környezet... Error! Bookmark not defined. Protocol-spec hálózati szolgáltatások... Error! Bookmark not defined. Socket-ek... Error! Bookmark not defined. Együttműködés - Interop (Inter Operation)... Error! Bookmark not defined..net és az XML... Error! Bookmark not defined. XML alapok... Error! Bookmark not defined. Alacsony szintű elérése... Error! Bookmark not defined. Szerializáció... Error! Bookmark not defined. app.config... Error! Bookmark not defined. Alkalmazásarchitekturák és az Adatbáziselérés alapjai... Error! Bookmark not defined. Eddig... Error! Bookmark not defined. Klasszikus Enterprise Architektúra... Error! Bookmark not defined. Példa... Error! Bookmark not defined. Grafikus felhasználói felület 1.... Error! Bookmark not defined. Üzenetvezérelt végrehajtás... Error! Bookmark not defined. Form készítése alapvető control-okkal... Error! Bookmark not defined. Alapvető UI tuning és responsibility példa ListView-val... Error! Bookmark not defined. Grafikus felhasználói felület 2.... Error! Bookmark not defined. COM alapú control-ok... Error! Bookmark not defined. A háromrétegű architektúra UI rétege... Error! Bookmark not defined. Származtatott Form-ok készítése... Error! Bookmark not defined. User control-ok (Felhasználó által definiált vezérlők)... Error! Bookmark not defined. Grafikus felhasználói felület 3.... 1 Képek kezelése... 1 Dupla pufferelés... 2 Szálkezelés... 3 Thread-ek... 3 Szinkronizáció... 3 Várakozási sor implementációja - példa... 5 Thread pool... 7 A teljes jegyzet tartalomjegyzéke:... 8 A jegyzet készítői: Tóth Katalin Tünde Kovács István ELTE 2008.