一.创建项目
打开visual 2005,文件->新建->项目

二.设计界面,编写代码
首先进行系统界面设计,编写相关逻辑代码处理
在初始化窗体时,加载扫描头触发事件
private SymbolScanWood.SymbolScanWood _objScan = new SymbolScanWood.SymbolScanWood("Text");

private void Zone_Load(object sender, EventArgs e)

...{
Cursor.Current = Cursors.WaitCursor;
_objScan.MyAfterRead += new EventHandler(_objScan_OnAfterRead);
Cursor.Current = Cursors.Default;
}
private void _objScan_OnAfterRead(object sender, EventArgs e)

...{
tbZone.Text = _objScan.BarcodeText;//进行扫描相关逻辑处理
}
窗体关闭时,关闭扫描头,释放扫描头资源,同时保存数据
private void Zone_Closing(object sender, CancelEventArgs e)

...{
_objScan.TermReader();
}
程序中引用的symbolScanWood.dll代码如下:
using System;
using System.Collections.Generic;
using System.Text;

namespace SymbolScanWood

...{
public class SymbolScanWood

...{
private string _strBarcode = "";
private byte[] _byteBarcodeData;
private string _strBarcodeType;
private int _nBarcodeLenth = 0;
private bool _bSuccess = false;
private DateTime _dTimeStamp;
private string _strDataType;

private Symbol.Barcode.Reader _MyReader = null;
private Symbol.Barcode.ReaderData _MyReaderData = null;
private System.EventHandler _MyEventHandler = null;
private event System.EventHandler _MyAfterRead = null;

public string BarcodeText

...{

get ...{ return _strBarcode; }
}

public byte[] BarcodeData

...{

get ...{ return _byteBarcodeData; }
}

public string BarcodeType

...{

get ...{ return _strBarcodeType; }
}

public int BarcodeLenth

...{

get ...{ return _nBarcodeLenth; }
}

public bool Success

...{

get ...{ return _bSuccess; }
}

public DateTime TimeStamp

...{

get ...{ return _dTimeStamp; }
}

public string DataType

...{

get ...{ return _strDataType; }
}

public SymbolScanWood(string strDataType)

...{
if ((strDataType != "Text") && (strDataType != "Binary"))

...{
throw new Exception("设置扫描类型错误!");
}
this._MyReader = null;
this._strDataType = strDataType;
this._MyReaderData = null;
this._MyEventHandler = null;
this._bSuccess = false;
this._strBarcodeType = "";
this._nBarcodeLenth = 0;
this._dTimeStamp = DateTime.Now;
this._strBarcode = "";
this._byteBarcodeData = new byte[0];

InitReader();
this.StartRead();
}

~SymbolScanWood()

...{
this.StopRead();
this.TermReader();
}

public System.EventHandler MyAfterRead

...{

get...{return _MyAfterRead;}

set...{_MyAfterRead=value;}
}



/**//// <summary>
/// Initialize the reader.
/// </summary>
public bool InitReader()

...{
// If reader is already present then fail initialize
if (_MyReader != null)

...{
return false;
}

// Create new reader, first available reader will be used.
_MyReader = new Symbol.Barcode.Reader();

// Create reader data
if(_strDataType.ToLower().Trim() == "Binary")

...{
_MyReaderData = new Symbol.Barcode.ReaderData(
Symbol.Barcode.ReaderDataTypes.Binary,
Symbol.Barcode.ReaderDataLengths.MaximumLabel);
}
else

...{
_MyReaderData = new Symbol.Barcode.ReaderData(
Symbol.Barcode.ReaderDataTypes.Text,
Symbol.Barcode.ReaderDataLengths.MaximumLabel);
}

this._MyEventHandler = new EventHandler(MyReader_ReadNotify);

// Enable reader, with wait cursor
_MyReader.Actions.Enable();

_MyReader.Parameters.Feedback.Success.BeepTime = 0;
_MyReader.Parameters.Feedback.Success.WaveFile = "\windows\alarm3.wav";

return true;
}


/**//// <summary>
/// Stop reading and disable/close reader
/// </summary>
public void TermReader()

...{
// If we have a reader
if ( this._MyReader != null )

...{
// Disable the reader
this._MyReader.Actions.Disable();

// Free it up
this._MyReader.Dispose();

// Indicate we no longer have one
this._MyReader = null;
}

// If we have a reader data
if ( this._MyReaderData != null )

...{
// Free it up
this._MyReaderData.Dispose();

// Indicate we no longer have one
this._MyReaderData = null;
}
}


/**//// <summary>
/// Start a read on the reader
/// </summary>
public void StartRead()

...{
// If we have both a reader and a reader data
if ( ( this._MyReader != null ) &&
( this._MyReaderData != null ) )

...{
// Submit a read
this._MyReader.ReadNotify += this._MyEventHandler;
this._MyReader.Actions.Read(this._MyReaderData);
}
}


/**//// <summary>
/// Stop all reads on the reader
/// </summary>
public void StopRead()

...{
// If we have a reader
if ( this._MyReader != null )

...{
// Flush (Cancel all pending reads)
this._MyReader.ReadNotify -= this._MyEventHandler;
this._MyReader.Actions.Flush();
}
}


/**//// <summary>
/// Read complete or failure notification
/// </summary>
private void MyReader_ReadNotify(object sender, EventArgs e)

...{
Symbol.Barcode.ReaderData TheReaderData = this._MyReader.GetNextReaderData();

// If it is a successful read (as opposed to a failed one)
if ( TheReaderData.Result == Symbol.Results.SUCCESS )

...{
_bSuccess = true;
// Handle the data from this read
this.HandleData(TheReaderData);

// Start the next read
this.StartRead();
}
else

...{
_bSuccess = false;
}

if(_MyAfterRead != null)
_MyAfterRead(sender, e);
}


/**//// <summary>
/// Handle data from the reader
/// </summary>
private void HandleData(Symbol.Barcode.ReaderData TheReaderData)

...{
_nBarcodeLenth = TheReaderData.Length;
_strBarcodeType = TheReaderData.Type.ToString();
_dTimeStamp = TheReaderData.TimeStamp;

if(_strDataType.Trim() == "Text")

...{
_strBarcode = TheReaderData.Text;
}
else

...{
_byteBarcodeData = new byte[_nBarcodeLenth];
for (int i = 0; i < _nBarcodeLenth; i++)

...{
_byteBarcodeData[i] = TheReaderData.RawData[i];
}
}
}
}
}
