This commit is contained in:
2024-11-01 11:47:29 -07:00
commit ebbc16ee6a
128 changed files with 23645 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,58 @@
using System.Reflection;
using System.Runtime.CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
//
// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

View File

@ -0,0 +1,430 @@
using System;
using System.Windows.Forms;
using Ivi.Visa;
using NationalInstruments.Visa;
namespace NationalInstruments.Examples.SimpleAsynchronousReadWrite
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class MainForm : System.Windows.Forms.Form
{
private MessageBasedSession mbSession;
private string lastResourceString = null;
private IVisaAsyncResult asyncHandle = null;
private System.Windows.Forms.TextBox writeTextBox;
private System.Windows.Forms.TextBox readTextBox;
private System.Windows.Forms.Button writeButton;
private System.Windows.Forms.Button readButton;
private System.Windows.Forms.Button openSessionButton;
private System.Windows.Forms.Button clearButton;
private System.Windows.Forms.Button closeSessionButton;
private System.Windows.Forms.Label stringToWriteLabel;
private System.Windows.Forms.Label stringToReadLabel;
private System.Windows.Forms.Button terminateButton;
private System.Windows.Forms.Label elementsTransferredLabel;
private System.Windows.Forms.TextBox elementsTransferredTextBox;
private System.Windows.Forms.TextBox lastIOStatusTextBox;
private System.Windows.Forms.Label lastIOStatusLabel;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public MainForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
SetupControlState(false);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(mbSession != null)
{
mbSession.Dispose();
}
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.writeButton = new System.Windows.Forms.Button();
this.readButton = new System.Windows.Forms.Button();
this.openSessionButton = new System.Windows.Forms.Button();
this.writeTextBox = new System.Windows.Forms.TextBox();
this.readTextBox = new System.Windows.Forms.TextBox();
this.clearButton = new System.Windows.Forms.Button();
this.closeSessionButton = new System.Windows.Forms.Button();
this.stringToWriteLabel = new System.Windows.Forms.Label();
this.stringToReadLabel = new System.Windows.Forms.Label();
this.terminateButton = new System.Windows.Forms.Button();
this.elementsTransferredLabel = new System.Windows.Forms.Label();
this.elementsTransferredTextBox = new System.Windows.Forms.TextBox();
this.lastIOStatusTextBox = new System.Windows.Forms.TextBox();
this.lastIOStatusLabel = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// writeButton
//
this.writeButton.Location = new System.Drawing.Point(5, 83);
this.writeButton.Name = "writeButton";
this.writeButton.Size = new System.Drawing.Size(74, 23);
this.writeButton.TabIndex = 3;
this.writeButton.Text = "Write";
this.writeButton.Click += new System.EventHandler(this.write_Click);
//
// readButton
//
this.readButton.Location = new System.Drawing.Point(79, 83);
this.readButton.Name = "readButton";
this.readButton.Size = new System.Drawing.Size(74, 23);
this.readButton.TabIndex = 4;
this.readButton.Text = "Read";
this.readButton.Click += new System.EventHandler(this.read_Click);
//
// openSessionButton
//
this.openSessionButton.Location = new System.Drawing.Point(5, 5);
this.openSessionButton.Name = "openSessionButton";
this.openSessionButton.Size = new System.Drawing.Size(92, 22);
this.openSessionButton.TabIndex = 0;
this.openSessionButton.Text = "Open Session";
this.openSessionButton.Click += new System.EventHandler(this.openSession_Click);
//
// writeTextBox
//
this.writeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.writeTextBox.Location = new System.Drawing.Point(5, 54);
this.writeTextBox.Name = "writeTextBox";
this.writeTextBox.Size = new System.Drawing.Size(275, 20);
this.writeTextBox.TabIndex = 2;
this.writeTextBox.Text = "*IDN?\\n";
//
// readTextBox
//
this.readTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.readTextBox.Location = new System.Drawing.Point(5, 136);
this.readTextBox.Multiline = true;
this.readTextBox.Name = "readTextBox";
this.readTextBox.ReadOnly = true;
this.readTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.readTextBox.Size = new System.Drawing.Size(275, 158);
this.readTextBox.TabIndex = 6;
this.readTextBox.TabStop = false;
//
// clearButton
//
this.clearButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.clearButton.Location = new System.Drawing.Point(6, 344);
this.clearButton.Name = "clearButton";
this.clearButton.Size = new System.Drawing.Size(275, 24);
this.clearButton.TabIndex = 6;
this.clearButton.Text = "Clear";
this.clearButton.Click += new System.EventHandler(this.clear_Click);
//
// closeSessionButton
//
this.closeSessionButton.Location = new System.Drawing.Point(97, 5);
this.closeSessionButton.Name = "closeSessionButton";
this.closeSessionButton.Size = new System.Drawing.Size(92, 22);
this.closeSessionButton.TabIndex = 1;
this.closeSessionButton.Text = "Close Session";
this.closeSessionButton.Click += new System.EventHandler(this.closeSession_Click);
//
// stringToWriteLabel
//
this.stringToWriteLabel.Location = new System.Drawing.Point(5, 40);
this.stringToWriteLabel.Name = "stringToWriteLabel";
this.stringToWriteLabel.Size = new System.Drawing.Size(91, 14);
this.stringToWriteLabel.TabIndex = 8;
this.stringToWriteLabel.Text = "String to Write:";
//
// stringToReadLabel
//
this.stringToReadLabel.Location = new System.Drawing.Point(5, 122);
this.stringToReadLabel.Name = "stringToReadLabel";
this.stringToReadLabel.Size = new System.Drawing.Size(101, 14);
this.stringToReadLabel.TabIndex = 9;
this.stringToReadLabel.Text = "String Read:";
//
// terminateButton
//
this.terminateButton.Enabled = false;
this.terminateButton.Location = new System.Drawing.Point(205, 83);
this.terminateButton.Name = "terminateButton";
this.terminateButton.Size = new System.Drawing.Size(74, 23);
this.terminateButton.TabIndex = 5;
this.terminateButton.Text = "Terminate";
this.terminateButton.Click += new System.EventHandler(this.terminate_Click);
//
// elementsTransferredLabel
//
this.elementsTransferredLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.elementsTransferredLabel.Location = new System.Drawing.Point(5, 308);
this.elementsTransferredLabel.Name = "elementsTransferredLabel";
this.elementsTransferredLabel.Size = new System.Drawing.Size(116, 11);
this.elementsTransferredLabel.TabIndex = 11;
this.elementsTransferredLabel.Text = "Elements Transferred:";
//
// elementsTransferredTextBox
//
this.elementsTransferredTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.elementsTransferredTextBox.Location = new System.Drawing.Point(5, 321);
this.elementsTransferredTextBox.Name = "elementsTransferredTextBox";
this.elementsTransferredTextBox.ReadOnly = true;
this.elementsTransferredTextBox.Size = new System.Drawing.Size(104, 20);
this.elementsTransferredTextBox.TabIndex = 12;
this.elementsTransferredTextBox.TabStop = false;
//
// lastIOStatusTextBox
//
this.lastIOStatusTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lastIOStatusTextBox.Location = new System.Drawing.Point(113, 321);
this.lastIOStatusTextBox.Name = "lastIOStatusTextBox";
this.lastIOStatusTextBox.ReadOnly = true;
this.lastIOStatusTextBox.Size = new System.Drawing.Size(168, 20);
this.lastIOStatusTextBox.TabIndex = 14;
this.lastIOStatusTextBox.TabStop = false;
//
// lastIOStatusLabel
//
this.lastIOStatusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.lastIOStatusLabel.Location = new System.Drawing.Point(113, 308);
this.lastIOStatusLabel.Name = "lastIOStatusLabel";
this.lastIOStatusLabel.Size = new System.Drawing.Size(116, 11);
this.lastIOStatusLabel.TabIndex = 13;
this.lastIOStatusLabel.Text = "Last I/O Status:";
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(287, 376);
this.Controls.Add(this.lastIOStatusTextBox);
this.Controls.Add(this.elementsTransferredTextBox);
this.Controls.Add(this.readTextBox);
this.Controls.Add(this.writeTextBox);
this.Controls.Add(this.lastIOStatusLabel);
this.Controls.Add(this.elementsTransferredLabel);
this.Controls.Add(this.terminateButton);
this.Controls.Add(this.stringToReadLabel);
this.Controls.Add(this.stringToWriteLabel);
this.Controls.Add(this.closeSessionButton);
this.Controls.Add(this.clearButton);
this.Controls.Add(this.openSessionButton);
this.Controls.Add(this.readButton);
this.Controls.Add(this.writeButton);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimumSize = new System.Drawing.Size(295, 316);
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Simple Asynchronous Read/Write";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new MainForm());
}
private void openSession_Click(object sender, System.EventArgs e)
{
using (SelectResource sr = new SelectResource())
{
if(lastResourceString != null)
{
sr.ResourceName = lastResourceString;
}
DialogResult result = sr.ShowDialog(this);
if(result == DialogResult.OK)
{
lastResourceString = sr.ResourceName;
Cursor.Current = Cursors.WaitCursor;
try
{
using (var rmSession = new ResourceManager())
{
mbSession = (MessageBasedSession)rmSession.Open(sr.ResourceName);
// Use SynchronizeCallbacks to specify that the object marshals callbacks across threads appropriately.
mbSession.SynchronizeCallbacks = true;
SetupControlState(true);
}
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
finally
{
Cursor.Current = Cursors.Default;
}
}
}
}
private void closeSession_Click(object sender, System.EventArgs e)
{
SetupControlState(false);
mbSession.Dispose();
}
private void write_Click(object sender, System.EventArgs e)
{
try
{
SetupWaitingControlState(true);
string textToWrite = ReplaceCommonEscapeSequences(writeTextBox.Text);
asyncHandle = mbSession.RawIO.BeginWrite(
textToWrite,
new VisaAsyncCallback(OnWriteComplete),
(object)textToWrite.Length);
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
}
private void read_Click(object sender, System.EventArgs e)
{
try
{
SetupWaitingControlState(true);
asyncHandle = mbSession.RawIO.BeginRead(
1024,
new VisaAsyncCallback(OnReadComplete),
null);
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
}
private void clear_Click(object sender, System.EventArgs e)
{
ClearControls();
}
private void terminate_Click(object sender, System.EventArgs e)
{
SetupWaitingControlState(false);
try
{
mbSession.RawIO.AbortAsyncOperation(asyncHandle);
}
catch(Exception exp)
{
MessageBox.Show(exp.Message);
}
}
private void OnWriteComplete(IVisaAsyncResult result)
{
try
{
SetupWaitingControlState(false);
mbSession.RawIO.EndWrite(result);
lastIOStatusTextBox.Text = "Success";
}
catch(Exception exp)
{
lastIOStatusTextBox.Text = exp.Message;
}
elementsTransferredTextBox.Text = ((int)result.Count).ToString();
}
private void OnReadComplete(IVisaAsyncResult result)
{
try
{
SetupWaitingControlState(false);
string responseString = mbSession.RawIO.EndReadString(result);
readTextBox.Text = InsertCommonEscapeSequences(responseString);
lastIOStatusTextBox.Text = "Success";
}
catch(Exception exp)
{
lastIOStatusTextBox.Text = exp.Message;
}
elementsTransferredTextBox.Text = ((int)result.Count).ToString();
}
private void SetupControlState(bool isSessionOpen)
{
openSessionButton.Enabled = !isSessionOpen;
closeSessionButton.Enabled = isSessionOpen;
writeButton.Enabled = isSessionOpen;
readButton.Enabled = isSessionOpen;
writeTextBox.Enabled = isSessionOpen;
clearButton.Enabled = isSessionOpen;
if(isSessionOpen)
{
ClearControls();
writeTextBox.Focus();
}
}
private void SetupWaitingControlState(bool operationIsInProgress)
{
if (operationIsInProgress)
{
readTextBox.Text = String.Empty;
elementsTransferredTextBox.Text = String.Empty;
lastIOStatusTextBox.Text = String.Empty;
}
terminateButton.Enabled = operationIsInProgress;
writeButton.Enabled = !operationIsInProgress;
readButton.Enabled = !operationIsInProgress;
}
private string ReplaceCommonEscapeSequences(string s)
{
return (s != null) ? s.Replace("\\n", "\n").Replace("\\r", "\r") : s;
}
private string InsertCommonEscapeSequences(string s)
{
return (s != null) ? s.Replace("\n", "\\n").Replace("\r", "\\r") : s;
}
private void ClearControls()
{
readTextBox.Text = String.Empty;
lastIOStatusTextBox.Text = String.Empty;
elementsTransferredTextBox.Text = String.Empty;
}
}
}

View File

@ -0,0 +1,317 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="stringToWriteLabel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="stringToReadLabel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="elementsTransferredLabel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="lastIOStatusLabel.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AAAAamFJWVAnX1UhZFYla1gpalctWUsqbmVKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////AD///AAP//gAB//wA
AP/4AAB/+AAAf/AAAD/wAAA/4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAD4AAAAQAAAAAAAAAxAAAAPwAA
AH+AAAB/gAAA/4AAAf/BgAf/4+Af//////////////////////8oAAAAMAAAAGAAAAABABgAAAAAAAAb
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkoOBTkM3SEAjWUohVkcZX08gY1QfZ1giW00ZVUcY
TUAgWk44jIRpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeG9gSi8bZ0IzlHJU
moFLoopP0bd707l6q5FPxq1o07x2q5RPk4A6i3o2alsjRTgWY1hDAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
++O007SCo4RO48aM48qLqZNPk345fGwsXU8YXFEtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvbbQSjh9OCB6NyF6Py95UUl2AAAAAAAAAAAAAAAAAAAA
jYZ8QjYkTDwfbl4zhHI/rJVdrZRZr5NZyqxyyKlurI5VrJFajHdAcV4qV0cXTkAgkop4AAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzsndkIWw
kYexrKbDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2VQTkcnR0MWSEETSD4VRTkRQzQLTDwYT0Ii
SEApcGpYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////
AAD///////8AAP///////wAA//8AB///AAD//AAB//8AAP/wAAB//wAA/+AAAD//AAD/wAAAH/8AAP+A
AAAP/wAA/wAAAAf/AAD+AAAAA/8AAP4AAAAD/wAA/AAAAAH/AAD8AAAAAf8AAPgAAAAA/wAA+AAAAAD/
AAD4AAAAAP8AAPgAAAAAfwAA+AAAAAB/AADwAAAAAH8AAPAAAAAAfwAA8AAAAAB/AADwAAAAAD8AAPAA
AAAABwAA8AAAAAADAADwAAAAAAEAAIAAAAAAgQAAgAAAAADDAACAAAAAAf8AAIAAAAAB/wAAgAAAAAP/
AACAAAAAA/8AAIAAAAAH/wAAwAAAAA//AADAAAAAH/8AAMAAAAA//wAA4DgAAP//AADgfAAB//8AAPD/
gA///wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA
</value>
</data>
</root>

View File

@ -0,0 +1,15 @@
Example Title: Simple Asynchronous Read/Write
Category: NI-VISA
Description: This example demonstrates how to use the NI-VISA .NET Library to
perform simple asynchronous operations. With asynchronous
operations, you first call a method to start the operation. You then
call a second method to complete the operation. The first method
returns a handle that you can use to check the progress of the operation.
Language: Visual C#
Required Software: NI-VISA
Required Hardware: Any message-based device

View File

@ -0,0 +1,189 @@
using System.Windows.Forms;
using NationalInstruments.Visa;
namespace NationalInstruments.Examples.SimpleAsynchronousReadWrite
{
/// <summary>
/// Summary description for SelectResource.
/// </summary>
public class SelectResource : System.Windows.Forms.Form
{
private System.Windows.Forms.ListBox availableResourcesListBox;
private System.Windows.Forms.Button okButton;
private System.Windows.Forms.Button closeButton;
private System.Windows.Forms.TextBox visaResourceNameTextBox;
private System.Windows.Forms.Label AvailableResourcesLabel;
private System.Windows.Forms.Label ResourceStringLabel;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;
public SelectResource()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(SelectResource));
this.availableResourcesListBox = new System.Windows.Forms.ListBox();
this.okButton = new System.Windows.Forms.Button();
this.closeButton = new System.Windows.Forms.Button();
this.visaResourceNameTextBox = new System.Windows.Forms.TextBox();
this.AvailableResourcesLabel = new System.Windows.Forms.Label();
this.ResourceStringLabel = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// availableResourcesListBox
//
this.availableResourcesListBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.availableResourcesListBox.Location = new System.Drawing.Point(5, 18);
this.availableResourcesListBox.Name = "availableResourcesListBox";
this.availableResourcesListBox.Size = new System.Drawing.Size(282, 108);
this.availableResourcesListBox.TabIndex = 0;
this.availableResourcesListBox.DoubleClick += new System.EventHandler(this.availableResourcesListBox_DoubleClick);
this.availableResourcesListBox.SelectedIndexChanged += new System.EventHandler(this.availableResourcesListBox_SelectedIndexChanged);
//
// okButton
//
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
this.okButton.Location = new System.Drawing.Point(5, 187);
this.okButton.Name = "okButton";
this.okButton.Size = new System.Drawing.Size(77, 25);
this.okButton.TabIndex = 2;
this.okButton.Text = "OK";
//
// closeButton
//
this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.closeButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.closeButton.Location = new System.Drawing.Point(82, 187);
this.closeButton.Name = "closeButton";
this.closeButton.Size = new System.Drawing.Size(77, 25);
this.closeButton.TabIndex = 3;
this.closeButton.Text = "Cancel";
//
// visaResourceNameTextBox
//
this.visaResourceNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.visaResourceNameTextBox.Location = new System.Drawing.Point(5, 157);
this.visaResourceNameTextBox.Name = "visaResourceNameTextBox";
this.visaResourceNameTextBox.Size = new System.Drawing.Size(282, 20);
this.visaResourceNameTextBox.TabIndex = 4;
this.visaResourceNameTextBox.Text = "GPIB0::2::INSTR";
//
// AvailableResourcesLabel
//
this.AvailableResourcesLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.AvailableResourcesLabel.Location = new System.Drawing.Point(5, 5);
this.AvailableResourcesLabel.Name = "AvailableResourcesLabel";
this.AvailableResourcesLabel.Size = new System.Drawing.Size(279, 12);
this.AvailableResourcesLabel.TabIndex = 5;
this.AvailableResourcesLabel.Text = "Available Resources:";
//
// ResourceStringLabel
//
this.ResourceStringLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.ResourceStringLabel.Location = new System.Drawing.Point(5, 141);
this.ResourceStringLabel.Name = "ResourceStringLabel";
this.ResourceStringLabel.Size = new System.Drawing.Size(279, 13);
this.ResourceStringLabel.TabIndex = 6;
this.ResourceStringLabel.Text = "Resource String:";
//
// SelectResource
//
this.AcceptButton = this.okButton;
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.CancelButton = this.closeButton;
this.ClientSize = new System.Drawing.Size(292, 220);
this.Controls.Add(this.ResourceStringLabel);
this.Controls.Add(this.AvailableResourcesLabel);
this.Controls.Add(this.visaResourceNameTextBox);
this.Controls.Add(this.closeButton);
this.Controls.Add(this.okButton);
this.Controls.Add(this.availableResourcesListBox);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.KeyPreview = true;
this.MaximizeBox = false;
this.MinimumSize = new System.Drawing.Size(177, 247);
this.Name = "SelectResource";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Select Resource";
this.Load += new System.EventHandler(this.OnLoad);
this.ResumeLayout(false);
}
#endregion
private void OnLoad(object sender, System.EventArgs e)
{
// This example uses an instance of the NationalInstruments.Visa.ResourceManager class to find resources on the system.
// Alternatively, static methods provided by the Ivi.Visa.ResourceManager class may be used when an application
// requires additional VISA .NET implementations.
using (var rmSession = new ResourceManager())
{
foreach (string s in rmSession.Find("(ASRL|GPIB|TCPIP|USB)?*INSTR"))
{
availableResourcesListBox.Items.Add(s);
}
}
}
private void availableResourcesListBox_DoubleClick(object sender, System.EventArgs e)
{
string selectedString = (string)availableResourcesListBox.SelectedItem;
ResourceName = selectedString;
this.DialogResult = DialogResult.OK;
this.Close();
}
private void availableResourcesListBox_SelectedIndexChanged(object sender, System.EventArgs e)
{
string selectedString = (string)availableResourcesListBox.SelectedItem;
ResourceName = selectedString;
}
public string ResourceName
{
get
{
return visaResourceNameTextBox.Text;
}
set
{
visaResourceNameTextBox.Text = value;
}
}
}
}

View File

@ -0,0 +1,365 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used forserialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
AAAAamFJWVAnX1UhZFYla1gpalctWUsqbmVKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////AD///AAP//gAB//wA
AP/4AAB/+AAAf/AAAD/wAAA/4AAAH+AAAB/gAAAf4AAAH+AAAB/gAAAD4AAAAQAAAAAAAAAxAAAAPwAA
AH+AAAB/gAAA/4AAAf/BgAf/4+Af//////////////////////8oAAAAMAAAAGAAAAABABgAAAAAAAAb
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkoOBTkM3SEAjWUohVkcZX08gY1QfZ1giW00ZVUcY
TUAgWk44jIRpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeG9gSi8bZ0IzlHJU
moFLoopP0bd707l6q5FPxq1o07x2q5RPk4A6i3o2alsjRTgWY1hDAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAhH1yTUQhaFgcmHlD3reN0q9zp41AvaNt89en38KSpIVUzK16/OSt0bd9mYNFqZZUz759pI5c
blowRzkZhH5rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa19GWD8Pi3ImnIcoxa5d79mWuqNSrZs+uKJk2MCK4seU
yqt73LyM5seVwqVuqI9SsZta3siE4s6NqpBTgGw5UEIfU04zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATkolbVgWp4I4q4ZE
sZxdyb6KuKt9rJhfvaZcuaFZuZ5ZxqdmzqtvyqRrw5xjw5xiu5dZuplWw6Jc4cJ6yapklXw9n41XbWE3
S0QoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAVkwvaFoUqY46poBOjGhddWRtXVdmSz9NZ0tKo4Flxa5yz7p538WI4sSKyqhwvJdi0q15
4LuHzalzvpxis5NOuptUp4tGqZFRwKx0dmg8SkAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY1dAc1YeqI9BmH1JY0VSQSVnMSB5JRd0NyF3KwtK
NRcvj4Rgtq176t+s1MaRuadyval05tCd59Cgvqh44MmYw6purJFOtppSrI9Ft5xTx69whXJBV0wuAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg3tsVkMho345
mXxHZE1MPCdsOCGMMRqPNxyUMhWJPCSEKRxQODEhp6B+49uzzMKTuax5wrN84NCZ5dOgr55tzbqL48+a
s55huZ1Wu5pLtZNArY9Dpo1PaVoxe3RiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAOi8ZiHNIu5ZZh2tgRC9lMR+LLBaMLhB1MA1vNxiIIx+EKzNzJBMghm1o9NnG
3sKiyayG1LWK38KW9tmuw6N7x6mC7tqtvapzu6Bcvp1NwJtDsY85pok/k39NSD0fAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd3BZbFspp45Kv6BnaUtyOxt9MRmMKxx6
HRE8SjFRQyl1Jx2HLi99KCZHT0ZE6ti85Maf0K2J3L2cz7mU6taq2L+Uza+H8d2uxKx6up9qwaNmvZ1T
uptHrpA/ln09clw0bFxKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
S0IgmYREu59StZhoWz17NRKENRyJJx5pJyExr5qaY0yEJBV/Ni+HOkFtJyouv7SZ2sGa17mZ28SpzcCd
z8SZ28me582k6dCix66AvKN2vqNwup1duJhKtJVBpIk7lH4/WkgcAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAf3xnYFMop45Jw6ZcoIVkTDF2MROBOSWHJh9bSEFFyLSqeGCMLh1/
MSiESE+EHR8tn5qL386z38uz2Mu11s+wzcehzr+Z0LeVzreMw6+Bv6t8vKZxvKFjv59Vt5ZEqY02qJI7
cGIZgHtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFEygXE7tZlOyalliW9f
PyVzLxaCOy2BIR1HamJZzrqkm4WhMR13LyKCT1SRICQ9hoZ/49rG39TB2dK+1dO21tOu1cim1sCkzbuU
yLmMwrWCvKx0vKVmvqBbvJhOs5A9rpI4lH8pXFQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAARTgVnopItZVFtpVZdVxjOR94LxyEOTJ1HRovnJF528iktZ2nPCZzMCGEXFueKSxKa2xr
6OPR4tvG493H5OHC3ti228uz2sG00r+tx7ufvreNvLV/vK5wvKJhwp5bt41FuJBBp4Y6VUgjAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXUwcpo9DsZA+ro1baVJrNBl6LR2DOzlwKCQq
uKmJ4M6hwqymTDR3MSCFX1mePTtbWllX7+nU7OHH6uHC6uG+5tu94M3AzLC6poymlIGUkYiDhoFlp55u
uqZpvZ9bupFIu49EsotFXU0noZ+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFkd
p488tZRArIxjWkVtNRmBLyKGLC5aNzEswq+K0b+OwqyaVT11Lh2DWlCXT0prQz87186z69y52Mih08Se
1sSuxq62c1R+RyVzQyd0STlsTkVZRT4un5NhuaRcvZ1LupI/sYo/Z1Yscm1YAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAjoByemYmppA4uJpIqIppSTZpNxqFMieKJihPUkg90LeT1cKP0r2hYkt6
KhqBVkuUZmGBOjUvtaqJ3suh3Meb482qxK6nemOFQiVwPRuINxiLMx6DTkGIRj5YTkUrtqlnv6ZOuJc8
uJRDcF4waGJKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbVpLdGEdmoYrtJhJn4JpQzBr
NxmHMSaIIiRJZllN2rya4s6c3suoa1Z/JheATEORdXOWPDoyqJ5528eY3cOW69O0r5mhQCtlOiOGMhuC
LhiIMh6XNCWPVUuLNCwthntKwatZsZI8poI3alcobWdLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAcV1Qc2Ebm4crtpxOlnxmQCxtNhiFNyyLGBo7gnNk3b2c2cSU2Mage2iLJxqCQDuNh4euKikl
oJZy28aX4MSZ6tG8iHWONCJyKxuIUEiRMCl5HxKFJxeTQzSUT0RmPC8buKRoqYtIpIBHbFozcWtSAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkIR5eGQdrZM5tJdKi3FgOyV3NCGBPjaCFxYunJJ6
1byS1b2P18Shi3mZLxuAQjaLkI+3IiIfo5l5486i1L6ay7e7XkmGNB17OyaBfHemJyhOLyZ2KxWPNh+Q
V0eBJRcknY5yn45fkHlTU0ZBSkZPqqq1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn5iNcFsb
rZE8sZJIf2RbNh1+MSV+QDp7GhcnoJp70r6N38aY3syqiniTOB9/OimFioW3NzY+qJ2K+OTF4sy4r527
Mx53MxmDYkqZbWSFUVNXVk98MRiDNRyLT0WAIxw8TD5WWURcTzJaOCBnKxlnJBZYMCVZSENjmpioAAAA
AAAAAAAAAAAAAAAAAAAAAAAAu7SqW0QYqpBAvKJbblNXMRp/LiN+ODJwJCEtrqeH3MmY4cmb5tWwoJCk
OiN8LhyBfHi2R0ZakYV8++bT8tvYkX2qJxR0NB+Jf2u4UkJVh4RwenKFOiF/MhmJODFxKyZbMR1sPBqD
QBiLQB2SOxyPPB6KOR5/OSNzMSJeQjpfAAAAAAAAAAAAAAAAAAAAAAAA087FUDcdoIhBrphbX0VaLRiB
NCiFLidhLCkuqqGA07+Q38mZ39CnsKKtQSx5KBiAbmuwU1Zra2NZ8d3M3cTPX0uGKBp6OzGOhHmyUT45
sat8jYR+QCZ3OBiWMSGDLB97NR2ROBeWOhyJMBxtRzOCPCKBQiOPPByLQCOHNSBrUkpuAAAAAAAAW0l/
QDNxLixOhYKAbVRIfmovnoteUjhiKxaEPC+MKCBTTUhEwreUv6l7y7aBzL2Pq52cTzt3JRZ+UlKXZm99
QkMv1ca0qJCsPyt2Jx97U1SWXV9yeGJP2MmUy8Ckc1mKOhaFOBqMMRaDMRh6PChxKCE8RkpNAAAAr6fI
bFyaSzGJPSR9Qy53g3idAAAAAAAAOyNpNiR1FxNBU1FXqJqWZVQljn5jRi1pKhaFNyiEIBZBbWZXx7iR
wKl60b2D39Ce0MG2ZU9+JBB+PTqJeoOXMTQquq6odVmQMhp8Jx5+a3GfQ0dDu6KO5c6n5tawuKSjX0Fz
RiZtRilrTjliYVRgQT4rfIBzAAAAAAAA6ObxsqvHlIuvycTWAAAAAAAAAAAAOyBxOSSBHhhUQT9T0szK
UEMoaltcQit4JxSDLRx0IRUzj4Zpw7GFwqh5zbh7zLyD4M23fmaHJwt9NSeLenqtMDBCYlJwUTCNLhGM
QjWYZGKGXFpI59Gzv6SB28aV0cCMpItyqImHmoF3nY1wgnVTST0kAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAARSqANyKEIRpfJSJD8O7vgnttMCI6PCaAKheDLxttGQsdoZRr1cCOup1ty7Z0xrN25M6u
qI2cNBR4MRqLVkuiTEGAKRRZPh6NNBmTYFGlSkBYq52F4dGdtqBv69SZx7BnwaRqzq1+sZlbnY5LY1Mn
joJ1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUjmPNSGEJyFrEg46z83P3drYOClYMh+BKxmB
JBBbIBEXtqZx5cyVvJtqx69qw65u2sGa1bm1UDR0MxqDLRiLOSaMPCSENx6GQjKLXVaCWUtK4siq0cKG
vapv5s2JyKlb2a5xvJRXm4EygnMsU0QiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY02c
MiB/KSJxDQk/iYiI+Pj6aVmXNSOKLx6CHAhMLyEerZxg0rd7v55pwKdfwapo2L2S79K8gGt9OyNxNB2Q
MhyPNCCAOi16VlV/VVhUopRz786p2L6W07qIyaxhupdBvpBOrIE/oIQ3U0MPlYt9AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAg3qkOSZ8MB5+HQ9XX15o9/f5WU2KNCCHMiCAFQY8WUhCz7p9r5NJ
vJpTwqNbvaBj0raI582rs5qRdVx3QixlOihnPS5kZ16AhoCHnJR5taBw17N+2rSCyaRnvpxIs5E2rYg8
oYFBYk0cd25VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARDF9MROCJA1pFxc3
k5KmPzF5LxaBLhpxEwYsY1JK2cOJsphHt5RDxqBcy6lvtZlmtJtovZ5qt5ttqpRzi3pmjX1uo5SAr5t8
t5trwqBhwZpRwZZKt48+pYQspYkzlnw1XEgbWks0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAATjyCORuFLBF4CgI/JBxXNiGAMheEMR5lFQwjQTElrpxowKditZVO79OV5seO0rV8
z7R1uZ1Lup9RsptYs55nval5x7GCzbN+zq5uwJxTvpdIs5I9rpA6noQzln06Y0wjZ1VAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmYy8PiSCMhWBIgtuKhV3OR+PNh2CJxdJ
dWt6ioB0Sz0WkHxKpotW1LWD48WQsZNX28CA5MyRtptlwql458+h38mctp9x18GM9+GlwKhkpI1DppE9
mYY2gW4vTjwThXhnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAX0yQOB58MxeCOR+KOSGIMSBuTkZiAAAAAAAAAAAAWU00U0Ahc106tpxyr5ZguqBn996u2LiL0rCC
++O007SCo4RO48aM48qLqZNPk345fGwsXU8YXFEtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvbbQSjh9OCB6NyF6Py95UUl2AAAAAAAAAAAAAAAAAAAA
jYZ8QjYkTDwfbl4zhHI/rJVdrZRZr5NZyqxyyKlurI5VrJFajHdAcV4qV0cXTkAgkop4AAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzsndkIWw
kYexrKbDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa2VQTkcnR0MWSEETSD4VRTkRQzQLTDwYT0Ii
SEApcGpYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////
AAD///////8AAP///////wAA//8AB///AAD//AAB//8AAP/wAAB//wAA/+AAAD//AAD/wAAAH/8AAP+A
AAAP/wAA/wAAAAf/AAD+AAAAA/8AAP4AAAAD/wAA/AAAAAH/AAD8AAAAAf8AAPgAAAAA/wAA+AAAAAD/
AAD4AAAAAP8AAPgAAAAAfwAA+AAAAAB/AADwAAAAAH8AAPAAAAAAfwAA8AAAAAB/AADwAAAAAD8AAPAA
AAAABwAA8AAAAAADAADwAAAAAAEAAIAAAAAAgQAAgAAAAADDAACAAAAAAf8AAIAAAAAB/wAAgAAAAAP/
AACAAAAAA/8AAIAAAAAH/wAAwAAAAA//AADAAAAAH/8AAMAAAAA//wAA4DgAAP//AADgfAAB//8AAPD/
gA///wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA
</value>
</data>
<data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>8, 8</value>
</data>
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>(Default)</value>
</data>
<data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="$this.Name">
<value>SelectResource</value>
</data>
<data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</data>
<data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>80</value>
</data>
<data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="availableResourcesListBox.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="availableResourcesListBox.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="availableResourcesListBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="AvailableResourcesLabel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="AvailableResourcesLabel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="AvailableResourcesLabel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="cancelButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="cancelButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="cancelButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="okButton.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="okButton.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="okButton.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="ResourceStringLabel.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="ResourceStringLabel.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="ResourceStringLabel.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="visaResourceNameTextBox.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
<data name="visaResourceNameTextBox.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</data>
<data name="visaResourceNameTextBox.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>Private</value>
</data>
</root>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>10.0.21006.1</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{B8E8C039-E317-4A83-94BA-BC85DA03F880}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon>App.ico</ApplicationIcon>
<AssemblyKeyContainerName>
</AssemblyKeyContainerName>
<AssemblyName>SimpleAsynchronousReadWrite</AssemblyName>
<AssemblyOriginatorKeyFile>
</AssemblyOriginatorKeyFile>
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>WinExe</OutputType>
<RootNamespace>NationalInstruments.Examples.SimpleAsynchronousReadWrite</RootNamespace>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<StartupObject>
</StartupObject>
<FileUpgradeFlags>
</FileUpgradeFlags>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;DEBUG;NETFX2_0;NETFX3_5;NETFX4_0</DefineConstants>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>
</NoWarn>
<Optimize>false</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;NETFX2_0;NETFX3_5;NETFX4_0</DefineConstants>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>false</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>
</NoWarn>
<Optimize>true</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="Ivi.Visa, Culture=neutral, PublicKeyToken=a128c98f1d7717c1, processorArchitecture=MSIL" />
<Reference Include="NationalInstruments.Visa, Culture=neutral, PublicKeyToken=2eaa5af0834e221d, processorArchitecture=MSIL" />
<Reference Include="System">
<Name>System</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.dll</HintPath>
</Reference>
<Reference Include="System.Data">
<Name>System.Data</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.Data.dll</HintPath>
</Reference>
<Reference Include="System.Drawing">
<Name>System.Drawing</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.Drawing.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms">
<Name>System.Windows.Forms</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.Windows.Forms.dll</HintPath>
</Reference>
<Reference Include="System.Xml">
<Name>System.XML</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.XML.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Content Include="App.ico" />
<Compile Include="AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SelectResource.cs">
<SubType>Form</SubType>
</Compile>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SelectResource.resx">
<DependentUpon>SelectResource.cs</DependentUpon>
</EmbeddedResource>
<AppDesigner Include="Properties\" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleAsynchronousReadWrite", "SimpleAsynchronousReadWrite.2010.csproj", "{B8E8C039-E317-4A83-94BA-BC85DA03F880}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B8E8C039-E317-4A83-94BA-BC85DA03F880}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B8E8C039-E317-4A83-94BA-BC85DA03F880}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8E8C039-E317-4A83-94BA-BC85DA03F880}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8E8C039-E317-4A83-94BA-BC85DA03F880}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<ProjectType>Local</ProjectType>
<ProductVersion>11.0.50522.1 RCREL</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{B8E8C039-E317-4A83-94BA-BC85DA03F880}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ApplicationIcon>App.ico</ApplicationIcon>
<AssemblyKeyContainerName>
</AssemblyKeyContainerName>
<AssemblyName>SimpleAsynchronousReadWrite</AssemblyName>
<AssemblyOriginatorKeyFile>
</AssemblyOriginatorKeyFile>
<DefaultClientScript>JScript</DefaultClientScript>
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
<DefaultTargetSchema>IE50</DefaultTargetSchema>
<DelaySign>false</DelaySign>
<OutputType>WinExe</OutputType>
<RootNamespace>NationalInstruments.Examples.SimpleAsynchronousReadWrite</RootNamespace>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<StartupObject>
</StartupObject>
<FileUpgradeFlags>
</FileUpgradeFlags>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;DEBUG;NETFX2_0;NETFX3_5;NETFX4_0;NETFX4_5</DefineConstants>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>true</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>
</NoWarn>
<Optimize>false</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
<BaseAddress>285212672</BaseAddress>
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
<ConfigurationOverrideFile>
</ConfigurationOverrideFile>
<DefineConstants>TRACE;NETFX2_0;NETFX3_5;NETFX4_0;NETFX4_5</DefineConstants>
<DocumentationFile>
</DocumentationFile>
<DebugSymbols>false</DebugSymbols>
<FileAlignment>4096</FileAlignment>
<NoStdLib>false</NoStdLib>
<NoWarn>
</NoWarn>
<Optimize>true</Optimize>
<RegisterForComInterop>false</RegisterForComInterop>
<RemoveIntegerChecks>false</RemoveIntegerChecks>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Ivi.Visa, Culture=neutral, PublicKeyToken=a128c98f1d7717c1, processorArchitecture=MSIL" />
<Reference Include="NationalInstruments.Visa, Culture=neutral, PublicKeyToken=2eaa5af0834e221d, processorArchitecture=MSIL" />
<Reference Include="System">
<Name>System</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.dll</HintPath>
</Reference>
<Reference Include="System.Data">
<Name>System.Data</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.Data.dll</HintPath>
</Reference>
<Reference Include="System.Drawing">
<Name>System.Drawing</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.Drawing.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms">
<Name>System.Windows.Forms</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.Windows.Forms.dll</HintPath>
</Reference>
<Reference Include="System.Xml">
<Name>System.XML</Name>
<HintPath>..\..\..\..\..\..\..\..\..\..\WINNT\Microsoft.NET\Framework\v1.0.3705\System.XML.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Content Include="App.ico" />
<Compile Include="AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SelectResource.cs">
<SubType>Form</SubType>
</Compile>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SelectResource.resx">
<DependentUpon>SelectResource.cs</DependentUpon>
</EmbeddedResource>
<AppDesigner Include="Properties\" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,19 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleAsynchronousReadWrite", "SimpleAsynchronousReadWrite.2012.csproj", "{B8E8C039-E317-4A83-94BA-BC85DA03F880}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B8E8C039-E317-4A83-94BA-BC85DA03F880}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B8E8C039-E317-4A83-94BA-BC85DA03F880}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8E8C039-E317-4A83-94BA-BC85DA03F880}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8E8C039-E317-4A83-94BA-BC85DA03F880}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal