Fiber : DLL : Windows C# Examples


C# Examples » Windows » DLL »

 

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




HTML code for linking to this page:

Follow Navioo On Twitter

C# Examples

 Navioo Windows
» DLL