c# wpf document viewer pdf : Cut pages out of pdf file SDK Library service wpf asp.net html dnn AN38880-part180

Freescale Semiconductor
Application Note
©Freescale Semiconductor, Inc., 2009. All rights reserved.
This document describes how to perform advanced 
development tasks to create applications using an i.MX 
platform and the Microsoft® .NET Micro Framework.
These tasks (with examples) are as follows:
• GPIO pin configuration
• Working with threads, events, and persistent data
• Working with GUI elements
• Working with Windows® SideShow® applications
Before reading this document, it is suggested that users read 
the Development with Microsoft® .NET Micro Framework 
2.0 (AN3887) Application Note, which provides information 
and examples for the keyboard, certain interrupts, and the 
graphical user interface.
Document Number: AN3888
Rev. 0, 08/2009
Contents
1. GPIO Pin Configuration . . . . . . . . . . . . . . . . . . . . . . .  2
1.1. Identify CPU Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2
1.2. Configure Platform Pins . . . . . . . . . . . . . . . . . . . . . . .  2
1.3. Example: Serial Communications with GPIO  . . . . . .  6
2. Threads  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7
2.1. Multithreading  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7
2.2. Implement a Thread  . . . . . . . . . . . . . . . . . . . . . . . . . .  7
3. Events  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
3.1. Define the Delegate and Variable . . . . . . . . . . . . . . . .  9
3.2. Implement and Assign the Function . . . . . . . . . . . . . .  9
3.3. Example: Events, Threads, and GUI Usage . . . . . . .  10
4. Persistent Data  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  14
4.1. Create Storable Data . . . . . . . . . . . . . . . . . . . . . . . . .  15
4.2. Example: Persistent Data  . . . . . . . . . . . . . . . . . . . . .  15
4.3. Create a Flash Reference  . . . . . . . . . . . . . . . . . . . . .  16
4.4. FlashReference Class  . . . . . . . . . . . . . . . . . . . . . . . .  16
5. GUI Applications  . . . . . . . . . . . . . . . . . . . . . . . . . . .  17
5.1. Standard UI Elements . . . . . . . . . . . . . . . . . . . . . . . .  18
5.2. Using UI Elements  . . . . . . . . . . . . . . . . . . . . . . . . . .  18
5.3. Use the Screen as a Bitmap . . . . . . . . . . . . . . . . . . . .  24
6. SideShow Applications . . . . . . . . . . . . . . . . . . . . . . .  28
6.1. SideShow Enhanced Display Types . . . . . . . . . . . . .  28
6.2. Example: SideShow Applications  . . . . . . . . . . . . . .  28
Advanced Development with 
Microsoft
®
.NET Micro Framework 2.0 
by Multimedia Applications Division
Freescale Semiconductor, Inc.
Austin, TX
Cut pages out of pdf file - SDK Library service:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
www.rasteredge.com
Cut pages out of pdf file - SDK Library service:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
2
Freescale Semiconductor
GPIO Pin Configuration
1
GPIO Pin Configuration
General Purpose Input/Output (GPIO) ports are sets of single-bit I/O pins that are used for input or output. 
Embedded applications use GPIOs for controlling items such as switches, LEDs, as well as for handling 
button presses. This section describes how to program the GPIOs and provides an example for each 
concept.
1.1
Identify CPU Pins
Pin configuration is performed using the InputPortInterruptPort and OutputPort classes, located in 
the Microsoft.SPOT.Hardware namespace. Each class is specific to its required pin configuration. Pin 
information is provided by the i.MX board manufacturer through a static class called Pins, which contains 
multiple Cpu.Pin constant definitions that are used to associate specific pins with a unique pin ID.
Pin identification numbers (IDs) are consecutive, where:
• GPIO Port A Pin 0–31 numbers are 0–31
• GPIO Port B Pin 0–31 numbers are 32–63
• GPIO Port C Pin 0–31 numbers are 64–95
• and so on
If pin number is needed that is not defined in the Pins class, update the Pins class by adding the definition 
of the pin and associating its corresponding ID as defined above.
1.2
Configure Platform Pins
Freescale recommends configuring the pins for a particular platform in a separate 
<
Platform
>
Pins class 
where 
<
Platform
>
refers to the name of the platform. For example, the MXSDVK platform contains a 
class called MxsdvkPins, which is defined as follows:
public static class MxsdvkPins {
// Buttons
public const Cpu.Pin leftButton = Pins.GPIO_PORT_B_17;
public const Cpu.Pin rightButton = Pins.GPIO_PORT_B_15;
public const Cpu.Pin upButton = Pins.GPIO_PORT_B_14;
public const Cpu.Pin downButton = Pins.GPIO_PORT_B_16;
public const Cpu.Pin selectButton = Pins.GPIO_PORT_B_18;
public const Cpu.Pin rewindButton = Pins.GPIO_PORT_A_12;
public const Cpu.Pin fastforwardButton = Pins.GPIO_PORT_A_13;
// LEDs
public const Cpu.Pin greenKeypadLed = Pins.GPIO_PORT_D_9;
}
The MxsdvkPins class substitutes user-provided names for the available GPIO pins on the MXSDVK 
platform. This enables, for example, users to refer to the Left Keypad Button pin as 
MxsdvkPins.leftButton, rather than by the cryptic term Pins.GPIO_PORT_B_17.
SDK Library service:VB.NET Image: Image Cropping SDK to Cut Out Image, Picture and
application, this VB.NET image cropper library SDK provides a professional and easy to use .NET solution for developers to crop / cut out image file in a short
www.rasteredge.com
SDK Library service:C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark can view PDF document in single page or continue pages. Support to zoom in and zoom out PDF page.
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
3
GPIO Pin Configuration
1.2.1
Configure an Input Pin
The InputPort class in the Microsoft.SPOT.Hardware namespace configures a pin as an input pin with 
an optional glitch filter and pull up/down resistor. The glitch filter is used to avoid the bounce effect caused 
when the pin is connected through a path with mechanical state changes. Examples of mechanical switches 
include keyboards, push buttons, and relays.
Use these steps to configure an input pin:
1. Identify the pin. Examine the board schematic and select a pin to configure as an input. Refer to 
the platform schematic to select an available (non-protected) GPIO.
2. Confirm the number to associate with the pin. See Section1.1, “Identify CPU Pins,” to identify 
the number to be associated with the pin. In the following example, PORTC pin 5 is associated 
with pin ID 69 on the device:
public const Cpu.Pin GPIO_PORT_C_5 = (Cpu.Pin)69;
3. Update the 
<
Platform
>
Pins class and add an intuitive name for the pin:
public const Cpu.Pin sensorInput = Pins.GPIO_PORT_C_5
4. Declare the object that references the InputPort. It is typically defined as private for the class in 
which they are used:
private InputPort sensorInputPin;
5. Define the object and configure the pin. Initialization options vary depending on the pin 
requirements:
sensorInputPin = new InputPort(MxswdvkPins.sensorInput, true, Port.ResistorMode.PullUp);
NOTE
The glitch filter can be enabled if the input pin is connected to a mechanical 
switch.
The resistor mode can be specified based on the normal state required for 
the pin. However, if the i.MX does not support the specified resistor mode, 
then the resistor mode has no effect on the pin. Define the resistor mode that 
minimizes current draw to the circuitry around the pin. Select the resistor 
mode carefully, because the read value on the pin may be inaccurate if the 
pin is connected to isolated or high impedance circuitry.
Attempting to configure a pin that is already configured causes an 
exception. To reconfigure a pin, first call the Dispose() method.
6. Read the pin using the Read() method of the InputPin object:
if (sensorInputPin.Read()) runInputAction();
7. Deallocate resources to disable the pin for a port and mark it as available for reuse:
sensorInputPin.Dispose();
SDK Library service:VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
Remove Image from PDF Page. Image: Copy, Paste, Cut Image in can view PDF document in single page or continue pages. Support to zoom in and zoom out PDF page.
www.rasteredge.com
SDK Library service:C# PDF Text Extract Library: extract text content from PDF file in
Ability to extract highlighted text out of PDF document. How to C#: Extract Text Content from PDF File. C# example code for text extraction from all PDF pages.
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
4
Freescale Semiconductor
GPIO Pin Configuration
1.2.2
Configure an Interrupt Pin
The InterruptPin class is derived from the InputPort class. In addition to the characteristics and 
behaviors inherited from the InputPort class, the InterruptPort class publishes an event that can be 
configured to trigger on a change of the level or edge of the pin.
Use these steps to configure an interrupt pin:
1. Identify the pin. Examine the board schematic and select a pin to configure as an input. Refer to 
the platform schematic to determine an available (non-protected) GPIO. 
2. Confirm the number to associate with the pin. See Section1.1, “Identify CPU Pins,” to identify 
the number to be associated with the pin. In the following example, PORTC pin 6 is associated 
with pin ID 70 of the device:
public const Cpu.Pin GPIO_PORT_C_6 = (Cpu.Pin)70;
3. Update the 
<
Platform
>
Pins class and add an intuitive name for the pin:
public const Cpu.Pin leftButton = Pins.GPIO_PORT_C_6
4. Declare the object and define an object where the pin is referenced in the code:
InterruptPort leftButtonPin;
5. Define the object and configure the pin. Initialization options vary depending on the pin 
requirements:
leftButtonPin = new InterruptPort(MxswdvkPins.leftButton, true, 
Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeHigh);
See Section1.2.1, “Configure an Input Pin,” for important information about the glitch filter, 
resistance mode, and accidental pin re-configuration. Select the interrupt mode carefully. Take into 
account the resistor mode in order to avoid false interrupts.
6. Configure the interrupt handler. Create a function of type GPIOInterruptEventHandler, and 
then add this function to the event OnInterrupt of the leftButtonPin  object.
leftButtonPin.OnInterrupt += new GPIOInterruptEventHandler(leftButtonPin_onInterrupt);
NOTE
Multiple event handlers can be assigned to a particular event. The 
+=
and –
=
operators are used to subscribe and unsubscribe events, respectively.
7. Define the event handler:
void leftButtonPin_onInterrupt(Cpu.Pin port, Boolean state, TimeSpan time) {
Debug.Print("leftButtonPin interrupt fired");
}
8. Clear the interrupt. If a level interrupt event is configured in Step 4, call the ClearInterrupt() 
method of the object:
leftButtonPin.ClearInterrupt();
SDK Library service:VB.NET PDF Text Extract Library: extract text content from PDF
NET Programming. Extract and get partial and all text content from PDF file. Extract highlighted text out of PDF document. Image text
www.rasteredge.com
SDK Library service:C# WPF PDF Viewer SDK to view PDF document in C#.NET
Image from PDF Page. Image: Copy, Paste, Cut Image in PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET Abilities to zoom in and zoom out PDF page.
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
5
GPIO Pin Configuration
NOTE
The ClearInterrupt() method is typically called at the beginning of the 
event handler code in order to enable the interruption immediately. For a 
level interrupt configuration, the execution of the ClearInterrupt() can be 
delayed to create more complex event handling mechanisms. For example, 
when a key is pressed, the event handler code could process the key 
immediately and then start an asynchronous timer to delay the execution of 
the ClearInterrupt() function. This allows users to set an interval for key 
press repetition.
9. Read the pin using the Read() method of the inputPin  object:
if (sensorInputPin.Read()) runInputAction();
10.Deallocate resources of the pin to disable the pin for a port and mark it as available for reuse:
sensorInputPin.Dispose();
1.2.3
Configure an Output Pin
The OutputPort class of the Microsoft.SPOT.Hardware namespace sets the value of a GPIO pin by 
specifying the initial state of the pin. Configure the state of the pin in runtime by calling the Write() 
function of the pin object.
Use these steps to configure an output pin:
1. Identify the pin. Examine the board schematic and select a pin to configure as an input. Refer to 
the platform schematic to select an available (non-protected) GPIO. Select the pin based on ease 
of identification, accessibility, and value of the current. The i.MX microprocessors limit the current 
provided to the pins.
2. Confirm the number to associate with the pin. See Section1.1, “Identify CPU Pins,” to identify 
the number to be associated with the pin. In the example below, PORTC pin 7 is associated with 
pin ID 71 on the device:
public const Cpu.Pin GPIO_PORT_C_7 = (Cpu.Pin)71;
3. Define an object where the pin is referenced in the code:
OutputPort outputPin;
4. Initialize the object and configure the initial value for the pin. Initial states should be true for 
logic 1 and false for logic 0:
outputPin = new OutputPort(Pins.GPIO_PORT_C_7, false);
SDK Library service:VB.NET PDF - View PDF with WPF PDF Viewer for VB.NET
Image from PDF Page. Image: Copy, Paste, Cut Image in PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET Abilities to zoom in and zoom out PDF page.
www.rasteredge.com
SDK Library service:C# PDF Form Data fill-in Library: auto fill-in PDF form data in C#
NET. Support to fill in form field in specified position of adobe PDF file. Able to fill out all PDF form field in C#.NET. RasterEdge
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
6
Freescale Semiconductor
GPIO Pin Configuration
NOTE
The OutputPort class provides a constructor for additional pin 
configuration options, such as the glitch filter and resistor mode. 
Configuration is similar to the configuration of InputPort. The 
recommended initial state is false logic 0, to prevent lack of current at the 
start up and in extreme situations damage of the i.MX due to the current 
demand. Attempting to configure a pin that is already configured causes an 
exception. Call the Dispose() method prior to reconfiguring a pin.
5. Read the pin using the Read() method of the outputPin object:
if (outputPin.Read()) runOutputAction();
6. Write the pin. To force a value on the pin, use the Write() method of the outputPin object, where 
true represents a logical 1 and false represents a logical 0.
outputPin.Write(true);
7. Deallocate resources of the pin to disable the pin for a port and mark it as available for reuse:
sensorInputPin.Dispose();
1.3
Example: Serial Communications with GPIO
This example describes the initialization, configuration, and use of three GPIO pins. The first pin is 
configured as an input, the second as an interrupt input, and the third as an output.
1. Add a reference to the namespace that contains the classes to be used:
using Microsoft.SPOT.Hardware;
2. Define the objects that are used in this example:
InputPort inputPin;
InterruptPort leftButtonPin;
OutputPort outputPin;
3. Initialize and configure the pin objects:
inputPin = new InputPort(Pins.GPIO_PORT_C_5, true, Port.ResistorMode.PullUp);
leftButtonPin = new InterruptPort(Pins.GPIO_PORT_C_6, 
true, Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeHigh);
outputPin = new OutputPort(Pins.GPIO_PORT_C_7, false);
leftButtonPin.OnInterrupt += 
new GPIOInterruptEventHandler(inputPinInterrupt_onInterrupt);
The inputPinInterrupt_onInterrupt function is defined as follows:
private void inputPinInterrupt_onInterrupt(Cpu.Pin port, Boolean state, TimeSpan time) {
Debug.Print("inputPinInterrupt interruption");
//leftButtonPin.ClearInterrupt();
}
NOTE
The ClearInterrupt() method is not needed in this case, because the 
leftButtonPin is configured as an edge interrupt.
SDK Library service:VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
a PDF document which is out of order on creating, loading, merge and splitting PDF pages and Files document, deleting unnecessary page from PDF file and changing
www.rasteredge.com
SDK Library service:VB.NET PDF - WPF PDF Viewer for VB.NET Program
Image from PDF Page. Image: Copy, Paste, Cut Image in Tiff image, TXT file and other images file formats, and PDF pages, zoom in or zoom out PDF pages and go to
www.rasteredge.com
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
7
Threads
4. Use the objects. Use Read mode for the three pin objects of this example and Write mode (only) 
for the outputPin object. For the leftButtonPin  object, use the interrupt(s) assigned to the 
leftButtonPin object:
if (inputPin.Read()) ...
if (!leftButtonPin.Read()) ...
outputPin.Write(!outputPin.Read());
5. Dispose of the objects:
String legend = "Data saved no: " + deviceLog.Log.Count.ToString();
deviceLog.AddToLog(new Device((byte)deviceLog.Log.Count, legend));
6. Save the object in Flash:
deviceLogFlash.save(deviceLog);
2
Threads
In development, the term thread means a thread of execution. Threads are a way for a program to fork (or 
split) itself into two or more, simultaneously (or pseudo-simultaneously) running tasks. Threads and 
processes differ from one operating system to another but, in general, a thread is contained inside a process, 
and different threads in the same process share some resources, while different processes do not.
2.1
Multithreading
Although the .NET Micro Framework can execute only one application at a time, it provides a 
multithreading functionality that allows execution of multiple threads in parallel. The .NET Micro 
Framework assigns CPU time to the threads depending on the priorities specified for the threads 
themselves, and for the priorities of the threads that execute the call. Additionally .NET Micro Framework 
provides ways to suspend, resume, and sleep the thread.
2.2
Implement a Thread
Threads are managed through the Thread class in the System.Threading namespace. The Thread class 
creates and controls a thread, sets its priority, and gets its status. This section explains how to create, 
prioritize, start, sleep, suspend or stop, and verify the state of threads.
2.2.1
Create a Thread
To create a thread, assign a function (without parameters or return data) to the creator of the thread object. 
The created function contains the code for the thread. The thread code can call other functions and 
reference shared data, such as global variables, registers, GPIOs, or serial ports.
Thread t1 = Thread(new ThreadStart(thread1));
The thread object is managed through t1 and the thread code is in the thread1() function.
For shared data in threads, implement a synchronization process (such as flags, semaphores, mutex, 
queues) in order to read/write valid data.
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
8
Freescale Semiconductor
Events
2.2.2
Prioritize a Thread
Assign a priority to the thread in order to assign more MCU time to one thread than another:
t1.Priority = ThreadPriority.Highest;
It is recommended to assign higher priority to threads in critical processes, or to threads which have a quick 
process requirement.
2.2.3
Start a Thread
After defining a thread object for the function to run as a thread, execute the thread using the Start() 
function:
t1.Start();
2.2.4
Sleep a Thread
The Thread.Sleep method suspends the current thread for a specified time. A running thread can typically 
sleep for a period of time because it has no processes to perform. To suspend the thread, use the sleep() 
static function. A static sleep function affects only the running thread. Use sleep to suspend the main 
application. For example:
Thread.Sleep(5000); 
// Sleep current thread for 5 seconds
Thread.Sleep(0); 
// Exit from the current thread until next MCU time assigned
Thread.Sleep(Timeout.Infinite); 
// Sleep current thread forever
2.2.5
Suspend a Thread
To suspend a thread for an indeterminate amount of time, use the suspend and resume functions of the 
thread object:
t1.Suspend();
t1.Resume();
The Suspend function takes effect in the next sequential execution of the thread. That is, if the Suspend 
function is called, the thread code continues executing until the MCU time dedicated to that thread ends. 
To exit the thread, execute the Thread.Sleep(0) instruction after the Suspend() instruction.
2.2.6
Verify the State of a Thread
Verify the state of a thread through the ThreadState property of the thread object. For more information 
about available states and invocations, see the .NET Micro Framework Help.
if ((t1.ThreadState & ThreadState.Suspended) == ThreadState.Suspended)
// do something
3
Events
An event is an interruption to the system. The source of the interruption varies: key press, timeout, data 
received, network found, information request, and so forth. An event is captured and processed by the 
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
Freescale Semiconductor
9
Events
system to take a corresponding action. To use events, specify the functions to initiate when an action 
occurs. For example, assign a function at the application level to be called when serial data is received and 
decoded.
A common example of event implementation is found in the serial communications process of encoding 
and decoding data into frames at different layers. While many solutions are possible, events and threads 
are useful in allowing the main loop of the program to focus on the application, while delegating the serial 
communications to a communications module. Thus, the module interrupts the main loop only when 
required, such as when data is received and decoded.
The .NET Micro Framework functionality makes it easy to use events and threads to develop a 
system-independent module for serial communications and frame specifications. Libraries (DLLs) are 
used to include events and threads in an application.
In event communication, a delegate (comparable to a function pointer type) identifies the object or method 
that receives the event. The delegate is a class that can hold a reference to a method, and specifies the event 
parameters. Event usage is a two-part process: define the delegate and variable, and then implement and 
assign the event function.
3.1
Define the Delegate and Variable
Use these steps to define the delegate and variable:
1. Define the delegate. Delegate definitions accept common .NET Micro Framework delegates or 
custom delegates. For custom delegates, specify the parameter types and return values. For 
example:
delegate void InterruptDelegate(Object sender, String description);
2. Define the event variable using the event word. Event variable definitions accept common .NET 
Micro Framework delegates or custom delegates. For example:
event InterruptDelegate OnLoad;
3. Apply the event variable to execute the assigned event code. Apply the event variable in a thread 
to execute the event code as a separate task. For example:
if (OnLoad != null) OnLoad(this, "Loaded all the numbers");
3.2
Implement and Assign the Function
Use these steps to implement and assign the event function:
1. Define the event function with the same parameter and return types specified in the delegate (the 
parameter names may differ). For example:
void OnLoadEvent(Object sender, String description) {
Debug.Print(description);
}
2. Assign the event. Use the 
+=
operand described in Section1.2.2, “Configure an Interrupt Pin.” 
For example:
OnLoad += new InterruptDelegate(OnLoadEvent);
Advanced Development with Microsoft
®
.NET Micro Framework 2.0, Rev. 0
10
Freescale Semiconductor
Events
3.3
Example: Events, Threads, and GUI Usage
This example, which includes threads, events, and GUI standard usage, uses the following classes:
• Program class starts a hard mathematical order process in the HardMathEvaluation class
• HardMathEvaluation class uses events to notify the Program class at the end of each part of the 
process
3.3.1
HardMathEvaluation Class
The HardMathEvaluation class defines one delegate and two events. The objective is to create and order 
a buffer of semi-random numbers. The class generates the numbers, exits the corresponding event, orders 
the numbers, and again exits the corresponding event.
The following steps show how the class is built:
1. Include namespaces for the class:
using System;
using Microsoft.SPOT;
using System.Threading;
2. Define data types and variables to use:
public delegate void InterruptDelegate(Object sender, String description);
public event InterruptDelegate OnGenerated;
public event InterruptDelegate OnOrdered;
private int[] buffer;
private Thread thread;
private int ordered;
public int Ordered {get { return ordered;}}
— InterruptDelegate defines the structure of the functions for the events OnLoad and 
OnFinish.
— The buffer variable stores the array of numbers (elements) and the ordered variable (accessible 
as property through Ordered) contains the number of elements already ordered.
— The thread variable is used for a process that takes a long time to run as another task.
3. Use a constructor to define the number of elements to order and the size of the buffer variable:
public HardMathEvaluation(int numElements) {
buffer = new int[numElements];
}
4. Generate the numbers. The generateNumbers method creates a thread to work into the process as 
another task:
public void generateNumbers() {
ordered = 0;
thread = new Thread(new ThreadStart(generateNumbers_process));
thread.Start();
}
private void generateNumbers_process() {
for (int i = 0; i < buffer.Length; i++)
buffer[i] = Microsoft.SPOT.Math.Random(Int32.MaxValue);
if (OnGenerated != null) OnGenerated(this, "Generated all the numbers");
}
Documents you may be interested
Documents you may be interested