mirror of
https://github.com/farcasclaudiu/SmartThreadPool.git
synced 2026-06-22 09:01:19 +03:00
Added support for Silverlight and Mono (And more)
Also added: * Join, Choice, and Pipe to SmartThreadPool. * Local performance counters (for Mono, Silverlight, and WindowsCE)
This commit is contained in:
@@ -47,21 +47,78 @@ namespace TestSmartThreadPool
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.GroupBox groupBox4;
|
||||
private UsageControl.UsageHistoryControl usageHistorySTP;
|
||||
private System.Diagnostics.PerformanceCounter pcActiveThreads;
|
||||
private System.Diagnostics.PerformanceCounter pcInUseThreads;
|
||||
private System.Diagnostics.PerformanceCounter pcQueuedWorkItems;
|
||||
private System.Diagnostics.PerformanceCounter pcCompletedWorkItems;
|
||||
private long workItemsCompleted;
|
||||
|
||||
#if _WINDOWS
|
||||
|
||||
private System.Diagnostics.PerformanceCounter _pcActiveThreads;
|
||||
private System.Diagnostics.PerformanceCounter _pcInUseThreads;
|
||||
private System.Diagnostics.PerformanceCounter _pcQueuedWorkItems;
|
||||
private System.Diagnostics.PerformanceCounter _pcCompletedWorkItems;
|
||||
#endif
|
||||
|
||||
|
||||
private Func<long> _getActiveThreads;
|
||||
private Func<long> _getInUseThreads;
|
||||
private Func<long> _getQueuedWorkItems;
|
||||
private Func<long> _getCompletedWorkItems;
|
||||
|
||||
public Form1()
|
||||
{
|
||||
//
|
||||
// Required for Windows Form Designer support
|
||||
//
|
||||
InitializeComponent();
|
||||
|
||||
InitializeGUIPerformanceCounters();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
private void InitializeGUIPerformanceCounters()
|
||||
{
|
||||
#if _WINDOWS
|
||||
this._pcActiveThreads = new System.Diagnostics.PerformanceCounter();
|
||||
this._pcInUseThreads = new System.Diagnostics.PerformanceCounter();
|
||||
this._pcQueuedWorkItems = new System.Diagnostics.PerformanceCounter();
|
||||
this._pcCompletedWorkItems = new System.Diagnostics.PerformanceCounter();
|
||||
|
||||
//
|
||||
// pcActiveThreads
|
||||
//
|
||||
this._pcActiveThreads.CategoryName = "SmartThreadPool";
|
||||
this._pcActiveThreads.CounterName = "Active threads";
|
||||
this._pcActiveThreads.InstanceName = "Test SmartThreadPool";
|
||||
//
|
||||
// pcInUseThreads
|
||||
//
|
||||
this._pcInUseThreads.CategoryName = "SmartThreadPool";
|
||||
this._pcInUseThreads.CounterName = "In use threads";
|
||||
this._pcInUseThreads.InstanceName = "Test SmartThreadPool";
|
||||
//
|
||||
// pcQueuedWorkItems
|
||||
//
|
||||
this._pcQueuedWorkItems.CategoryName = "SmartThreadPool";
|
||||
this._pcQueuedWorkItems.CounterName = "Work Items in queue";
|
||||
this._pcQueuedWorkItems.InstanceName = "Test SmartThreadPool";
|
||||
//
|
||||
// pcCompletedWorkItems
|
||||
//
|
||||
this._pcCompletedWorkItems.CategoryName = "SmartThreadPool";
|
||||
this._pcCompletedWorkItems.CounterName = "Work Items processed";
|
||||
this._pcCompletedWorkItems.InstanceName = "Test SmartThreadPool";
|
||||
|
||||
_getActiveThreads = () => (long)_pcActiveThreads.NextValue();
|
||||
_getInUseThreads = () => (long)_pcInUseThreads.NextValue();
|
||||
_getQueuedWorkItems = () => (long)_pcQueuedWorkItems.NextValue();
|
||||
_getCompletedWorkItems = () => (long)_pcCompletedWorkItems.NextValue();
|
||||
#else
|
||||
_getActiveThreads = delegate () { return _smartThreadPool.PerformanceCountersReader.ActiveThreads; };
|
||||
_getInUseThreads = delegate () { return _smartThreadPool.PerformanceCountersReader.InUseThreads; };
|
||||
_getQueuedWorkItems = delegate () { return _smartThreadPool.PerformanceCountersReader.WorkItemsQueued; };
|
||||
_getCompletedWorkItems = delegate () { return _smartThreadPool.PerformanceCountersReader.WorkItemsProcessed; };
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
protected override void Dispose( bool disposing )
|
||||
@@ -114,10 +171,6 @@ namespace TestSmartThreadPool
|
||||
this.usageThreadsInPool = new UsageControl.UsageControl();
|
||||
this.groupBox4 = new System.Windows.Forms.GroupBox();
|
||||
this.usageHistorySTP = new UsageControl.UsageHistoryControl();
|
||||
this.pcActiveThreads = new System.Diagnostics.PerformanceCounter();
|
||||
this.pcInUseThreads = new System.Diagnostics.PerformanceCounter();
|
||||
this.pcQueuedWorkItems = new System.Diagnostics.PerformanceCounter();
|
||||
this.pcCompletedWorkItems = new System.Diagnostics.PerformanceCounter();
|
||||
((System.ComponentModel.ISupportInitialize)(this.spinIdleTimeout)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.spinMaxThreads)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.spinMinThreads)).BeginInit();
|
||||
@@ -127,10 +180,6 @@ namespace TestSmartThreadPool
|
||||
this.groupBox3.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.groupBox4.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pcActiveThreads)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pcInUseThreads)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pcQueuedWorkItems)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pcCompletedWorkItems)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// btnStart
|
||||
@@ -187,7 +236,6 @@ namespace TestSmartThreadPool
|
||||
this.label4.TabIndex = 5;
|
||||
this.label4.Text = "Idle timeout (Seconds)";
|
||||
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.label4.Click += new System.EventHandler(this.label4_Click);
|
||||
//
|
||||
// label2
|
||||
//
|
||||
@@ -245,6 +293,11 @@ namespace TestSmartThreadPool
|
||||
this.spinMaxThreads.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.spinMaxThreads.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.spinMaxThreads.Location = new System.Drawing.Point(8, 288);
|
||||
this.spinMaxThreads.Maximum = new decimal(new int[] {
|
||||
25,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.spinMaxThreads.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
@@ -266,6 +319,11 @@ namespace TestSmartThreadPool
|
||||
this.spinMinThreads.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.spinMinThreads.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.spinMinThreads.Location = new System.Drawing.Point(8, 256);
|
||||
this.spinMinThreads.Maximum = new decimal(new int[] {
|
||||
25,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.spinMinThreads.Name = "spinMinThreads";
|
||||
this.spinMinThreads.Size = new System.Drawing.Size(88, 29);
|
||||
this.spinMinThreads.TabIndex = 13;
|
||||
@@ -494,35 +552,11 @@ namespace TestSmartThreadPool
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.usageHistorySTP.BackColor = System.Drawing.Color.Black;
|
||||
this.usageHistorySTP.Location = new System.Drawing.Point(8, 16);
|
||||
this.usageHistorySTP.Maximum = 100;
|
||||
this.usageHistorySTP.Maximum = 25;
|
||||
this.usageHistorySTP.Name = "usageHistorySTP";
|
||||
this.usageHistorySTP.Size = new System.Drawing.Size(480, 104);
|
||||
this.usageHistorySTP.TabIndex = 0;
|
||||
//
|
||||
// pcActiveThreads
|
||||
//
|
||||
this.pcActiveThreads.CategoryName = "SmartThreadPool";
|
||||
this.pcActiveThreads.CounterName = "Active threads";
|
||||
this.pcActiveThreads.InstanceName = "Test SmartThreadPool";
|
||||
//
|
||||
// pcInUseThreads
|
||||
//
|
||||
this.pcInUseThreads.CategoryName = "SmartThreadPool";
|
||||
this.pcInUseThreads.CounterName = "In use threads";
|
||||
this.pcInUseThreads.InstanceName = "Test SmartThreadPool";
|
||||
//
|
||||
// pcQueuedWorkItems
|
||||
//
|
||||
this.pcQueuedWorkItems.CategoryName = "SmartThreadPool";
|
||||
this.pcQueuedWorkItems.CounterName = "Work Items in queue";
|
||||
this.pcQueuedWorkItems.InstanceName = "Test SmartThreadPool";
|
||||
//
|
||||
// pcCompletedWorkItems
|
||||
//
|
||||
this.pcCompletedWorkItems.CategoryName = "SmartThreadPool";
|
||||
this.pcCompletedWorkItems.CounterName = "Work Items processed";
|
||||
this.pcCompletedWorkItems.InstanceName = "Test SmartThreadPool";
|
||||
//
|
||||
// Form1
|
||||
//
|
||||
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
|
||||
@@ -549,8 +583,8 @@ namespace TestSmartThreadPool
|
||||
this.Name = "Form1";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "Test Smart Thread Pool";
|
||||
this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
|
||||
this.Load += new System.EventHandler(this.Form1_Load);
|
||||
this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);
|
||||
((System.ComponentModel.ISupportInitialize)(this.spinIdleTimeout)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.spinMaxThreads)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.spinMinThreads)).EndInit();
|
||||
@@ -560,10 +594,6 @@ namespace TestSmartThreadPool
|
||||
this.groupBox3.ResumeLayout(false);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox4.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pcActiveThreads)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pcInUseThreads)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pcQueuedWorkItems)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pcCompletedWorkItems)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
@@ -575,11 +605,13 @@ namespace TestSmartThreadPool
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
#if _WINDOWS
|
||||
bool runApplication = InitializePerformanceCounters();
|
||||
if (!runApplication)
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
Application.EnableVisualStyles();
|
||||
|
||||
Application.Run(new Form1());
|
||||
@@ -652,6 +684,7 @@ namespace TestSmartThreadPool
|
||||
stpStartInfo.MaxWorkerThreads = Convert.ToInt32(spinMaxThreads.Value);
|
||||
stpStartInfo.MinWorkerThreads = Convert.ToInt32(spinMinThreads.Value);
|
||||
stpStartInfo.PerformanceCounterInstanceName = "Test SmartThreadPool";
|
||||
stpStartInfo.EnableLocalPerformanceCounters = true;
|
||||
|
||||
_smartThreadPool = new SmartThreadPool(stpStartInfo);
|
||||
|
||||
@@ -695,13 +728,13 @@ namespace TestSmartThreadPool
|
||||
lblThreadInUse.Text = "0";
|
||||
lblThreadsInPool.Text = "0";
|
||||
lblWaitingCallbacks.Text = "0";
|
||||
usageThreadsInPool.Maximum = Convert.ToInt32(spinMaxThreads.Value);
|
||||
//usageThreadsInPool.Maximum = Convert.ToInt32(spinMaxThreads.Value);
|
||||
usageThreadsInPool.Value1 = 0;
|
||||
usageThreadsInPool.Value2 = 0;
|
||||
lblWorkItemsCompleted.Text = "0";
|
||||
lblWorkItemsGenerated.Text = "0";
|
||||
usageHistorySTP.Reset();
|
||||
usageHistorySTP.Maximum = usageThreadsInPool.Maximum;
|
||||
//usageHistorySTP.Maximum = usageThreadsInPool.Maximum;
|
||||
}
|
||||
|
||||
private void spinMinThreads_ValueChanged(object sender, System.EventArgs e)
|
||||
@@ -723,7 +756,7 @@ namespace TestSmartThreadPool
|
||||
{
|
||||
spinMinThreads.Value = spinMaxThreads.Value;
|
||||
}
|
||||
usageThreadsInPool.Maximum = Convert.ToInt32(spinMaxThreads.Value);
|
||||
//usageThreadsInPool.Maximum = Convert.ToInt32(spinMaxThreads.Value);
|
||||
if (null != _smartThreadPool)
|
||||
{
|
||||
_smartThreadPool.MaxThreads = (int)spinMaxThreads.Value;
|
||||
@@ -738,15 +771,17 @@ namespace TestSmartThreadPool
|
||||
return;
|
||||
}
|
||||
|
||||
int threadsInUse = (int)pcInUseThreads.NextValue();
|
||||
int threadsInPool = (int)pcActiveThreads.NextValue();
|
||||
//int threadsInUse = (int)_pcInUseThreads.NextValue();
|
||||
//int threadsInPool = (int)_pcActiveThreads.NextValue();
|
||||
int threadsInUse = (int)_getInUseThreads();
|
||||
int threadsInPool = (int)_getActiveThreads();
|
||||
|
||||
lblThreadInUse.Text = threadsInUse.ToString();
|
||||
lblThreadsInPool.Text = threadsInPool.ToString();
|
||||
lblWaitingCallbacks.Text = pcQueuedWorkItems.NextValue().ToString(); //stp.WaitingCallbacks.ToString();
|
||||
lblWaitingCallbacks.Text = _getQueuedWorkItems().ToString(); //stp.WaitingCallbacks.ToString();
|
||||
usageThreadsInPool.Value1 = threadsInUse;
|
||||
usageThreadsInPool.Value2 = threadsInPool;
|
||||
lblWorkItemsCompleted.Text = pcCompletedWorkItems.NextValue().ToString();
|
||||
lblWorkItemsCompleted.Text = _getCompletedWorkItems().ToString();
|
||||
lblWorkItemsGenerated.Text = workItemsGenerated.ToString();
|
||||
usageHistorySTP.AddValues(threadsInUse, threadsInPool);
|
||||
}
|
||||
@@ -793,10 +828,5 @@ namespace TestSmartThreadPool
|
||||
_workItemsGroup = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void label4_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
|
||||
<PropertyGroup>
|
||||
<ProjectType>Local</ProjectType>
|
||||
<ProductVersion>8.0.50727</ProductVersion>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{976DB12F-9198-4AD9-981A-1652615C9B0D}</ProjectGuid>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
@@ -33,7 +33,7 @@
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DefineConstants>TRACE;DEBUG;_WINDOWS</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
@@ -56,7 +56,7 @@
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DefineConstants>TRACE;_WINDOWS</DefineConstants>
|
||||
<DocumentationFile>
|
||||
</DocumentationFile>
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
@@ -72,16 +72,6 @@
|
||||
<DebugType>none</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseCE|AnyCPU' ">
|
||||
<OutputPath>bin\ReleaseCE\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>
|
||||
</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System">
|
||||
<Name>System</Name>
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
|
||||
<PropertyGroup>
|
||||
<ProjectType>Local</ProjectType>
|
||||
<ProductVersion>9.0.30729</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{E8C4E483-0336-4D89-95F8-8924789ACA51}</ProjectGuid>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ApplicationIcon>App.ico</ApplicationIcon>
|
||||
<AssemblyKeyContainerName>
|
||||
</AssemblyKeyContainerName>
|
||||
<AssemblyName>TestSmartThreadPoolMono</AssemblyName>
|
||||
<AssemblyOriginatorKeyFile>
|
||||
</AssemblyOriginatorKeyFile>
|
||||
<DefaultClientScript>JScript</DefaultClientScript>
|
||||
<DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
|
||||
<DefaultTargetSchema>IE50</DefaultTargetSchema>
|
||||
<DelaySign>false</DelaySign>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>TestSmartThreadPool</RootNamespace>
|
||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||
<StartupObject>TestSmartThreadPool.Form1</StartupObject>
|
||||
<FileUpgradeFlags>
|
||||
</FileUpgradeFlags>
|
||||
<UpgradeBackupLocation>
|
||||
</UpgradeBackupLocation>
|
||||
<OldToolsVersion>2.0</OldToolsVersion>
|
||||
</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;NO_WINDOWS</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>
|
||||
<DebugType>full</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
|
||||
<BaseAddress>285212672</BaseAddress>
|
||||
<CheckForOverflowUnderflow>false</CheckForOverflowUnderflow>
|
||||
<ConfigurationOverrideFile>
|
||||
</ConfigurationOverrideFile>
|
||||
<DefineConstants>TRACE;NO_WINDOWS</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>
|
||||
<DebugType>none</DebugType>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System">
|
||||
<Name>System</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Data">
|
||||
<Name>System.Data</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Drawing">
|
||||
<Name>System.Drawing</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Windows.Forms">
|
||||
<Name>System.Windows.Forms</Name>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml">
|
||||
<Name>System.XML</Name>
|
||||
</Reference>
|
||||
<ProjectReference Include="..\SmartThreadPool\SmartThreadPoolMono.csproj">
|
||||
<Project>{3462F30B-0156-409C-B256-6046D6F1764B}</Project>
|
||||
<Name>SmartThreadPoolMono</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\UsageControl\UsageControl.csproj">
|
||||
<Name>UsageControl</Name>
|
||||
<Project>{C11A4561-CCB5-4C96-8DF2-B804031D89D8}</Project>
|
||||
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="App.ico" />
|
||||
<Compile Include="AssemblyInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Form1.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Form1.resx">
|
||||
<DependentUpon>Form1.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<PropertyGroup>
|
||||
<PreBuildEvent>
|
||||
</PreBuildEvent>
|
||||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
Reference in New Issue
Block a user