====== Sample of a Bean ======
===== Source Code =====
Here is a sample code of a component in C# (save this to a file called Your_CSharpBean_Name.cs) :
using System;
using System.Threading; // For the thread demo purposes
using WComp.Beans;
namespace WComp.Beans
{
///
/// This is a sample bean, using a thread, which has an integer evented property and a method
/// to start the thread.
///
/// Notes: this bean uses the IThreadCreator interface providing a cleanup method named `Stop()'.
/// Several classes can be defined or used by a Bean, but only the class with the
/// [Bean] attribute will be available in WComp. Its ports will be all public methods,
/// events and properties definied in that class.
///
[Bean(Category="MyCategory")]
public class BeanThread1 : IThreadCreator {
private Thread t; // Private attributes of the class
private volatile bool run = false;
private int sleepVal = 1000;
private volatile int eventValue;
public BeanThread1() {
// Put here your init instructions
eventValue = 10;
}
public void Start() { // method starting the thread
if (!run) {
run = true;
t = new Thread(new ThreadStart(ThreadLoopMethod));
t.Start();
}
}
public void Stop() { // IThreadCreator defines the Stop() method
run = false;
}
// Loop sample
public void ThreadLoopMethod() {
while(run) {
Thread.Sleep(sleepVal);
// Check if the output is connected
if(Output_Sample != null)
// call the connected methods sequentially
Output_Sample(eventValue);
// and so on...
}
}
// --- Start: Input port sample ---
// an input port is a public method (like below)
public void Input_Sample(int intParam) {
eventValue = intParam;
// No return value is expected in WComp:
// results are given using events
}
// --- End: Input port sample ---
// --- Start: Output port sample ---
public delegate void Output_Sample_Signature(int val);
// The delegate defines the signature of the output method
public event Output_Sample_Signature Output_Sample;
// The output port is the event, named here Output_Sample
// --- End: Output port sample ---
}
}
===== Compilation =====
Here is a sample of the command line compilation:
csc.exe /target:library /r:Beans.dll Sample_Component.cs
You will find Beans.dll in the SharpWComp distrib.