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