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()); } }