Mega Code Archive

 
Categories / C# Tutorial / Windows
 

Fiber

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Runtime.InteropServices; using System.Threading; using System.Diagnostics; public class fmrFibers : System.Windows.Forms.Form {     private System.Windows.Forms.ListBox lstFibers;     [DllImport("kernel32.dll")]     extern static IntPtr ConvertThreadToFiber(int fiberData);     [DllImport("kernel32.dll")]     extern static IntPtr CreateFiber(int size, System.Delegate function, int handle);     [DllImport("kernel32.dll")]     extern static IntPtr SwitchToFiber(IntPtr fiberAddress);     [DllImport("kernel32.dll")]     extern static void DeleteFiber(IntPtr fiberAddress);     [DllImport("kernel32.dll")]     extern static int GetLastError();     delegate void SetTextOutputToEventLog(int number);     public fmrFibers() {         this.lstFibers = new System.Windows.Forms.ListBox();         this.SuspendLayout();         this.lstFibers.Size = new System.Drawing.Size(320, 212);         this.ResumeLayout(false);         Thread t1 = new Thread(new ThreadStart(NewThreadToFiberExecution));         t1.Start();     }     void OutputLog(int fiberNumber) {         this.Invoke(new AddToListBox(SetText), new object[] { fiberNumber });         SwitchToFiber(obj);     }     void SetText(int message) {         lstFibers.Items.Add("Fiber " + message.ToString() + " added this");     }     delegate void AddToListBox(int message);     System.IntPtr obj;     void NewThreadToFiberExecution() {         try {             SetTextOutputToEventLog stof = new SetTextOutputToEventLog(OutputLog);             obj = ConvertThreadToFiber(0);             long l1 = GetLastError();             System.IntPtr retVal1 = CreateFiber(500, stof, 1);             if (GetLastError() != 0) throw new Exception("Create Fiber failed!!");             IntPtr fiber1return = SwitchToFiber(retVal1);             if (GetLastError() != 0) throw new Exception("Create Fiber failed!!");             DeleteFiber(retVal1);         } catch (Exception e) {             throw e;         }     }     [STAThread]     static void Main() {         Application.Run(new fmrFibers());     } }