From aaae1139f2bb3a55910fff0aa907b3ba6395deea Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期二, 30 六月 2020 08:54:06 +0800
Subject: [PATCH] 添加goactor驱动

---
 src/Bro.Device.HikCamera/Bro.Device.HikCamera.csproj       |   43 +
 src/Bro.Device.SchneiderPLC/Bro.Device.SchneiderPLC.csproj |   40 +
 src/Bro.M071.Process/UI/M071_MainForm.Designer.cs          |   39 +
 libs/gocator/GoSdk.dll                                     |    0 
 src/Bro.M071.Process/packages.config                       |    2 
 src/GocatorTest/Properties/Settings.settings               |    7 
 libs/gocator/GoSdkNet.dll                                  |    0 
 src/Bro.Device.HikCamera/HikCameraDriver.cs                |   64 -
 libs/gocator/kApi.dll                                      |    0 
 src/Bro.Process.DBManager/Bro.Process.DataBase.csproj      |   40 +
 src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj   |   40 +
 src/Bro.M071.Process/M071Process.cs                        |   49 +
 src/GocatorTest/Form1.Designer.cs                          |   61 +
 src/Bro.M071.Process.Model/Bro.M071.Model.csproj           |   40 +
 src/Bro.M071.Process/UI/M071_MainForm.cs                   |   22 
 src/GocatorTest/Properties/Resources.resx                  |  117 +++
 src/Bro.Device.Gocator/Bro.Device.Gocator.csproj           |   48 +
 libs/gocator/msvcp120.dll                                  |    0 
 src/Bro.Common.Model/Bro.Common.Model.csproj               |   40 +
 src/Bro.UI.Device.Winform/CtrlCameraRunBase.cs             |   12 
 src/GocatorTest/App.config                                 |    6 
 src/Bro.UI.Config/App.config                               |   25 
 src/Bro.Process/Bro.Process.csproj                         |   40 +
 libs/gocator/msvcr120.dll                                  |    0 
 src/Bro.Common.Device/Bro.Common.Device.csproj             |   43 +
 src/GocatorTest/Properties/Resources.Designer.cs           |   71 ++
 src/Bro.M071.Process/Bro.M071.Process.csproj               |   54 +
 src/Bro.UI.Config/MenuForms/FrmOperation.cs                |   14 
 src/Bro.UI.Model.Winform/Bro.UI.Model.Winform.csproj       |   40 +
 src/GocatorTest/Properties/Settings.Designer.cs            |   30 
 src/GocatorTest/Properties/AssemblyInfo.cs                 |   36 +
 src/GocatorTest/Program.cs                                 |   22 
 src/Bro.UI.Config/MenuForms/FrmOperation.resx              |    4 
 src/Bro.Device.Gocator/kApi.dll                            |    0 
 src/GocatorTest/Form1.resx                                 |  120 +++
 libs/gocator/kApiNet.dll                                   |    0 
 src/Bro.Device.Gocator/GocatorDriver.cs                    |  219 ++++++
 src/Bro.UI.Device.Winform/CtrlCameraRunBase.Designer.cs    |   16 
 src/Bro.Device.Gocator/GoSdk.dll                           |    0 
 src/Bro.M071.Process/UI/M071Node.cs                        |   15 
 src/GocatorTest/Form1.cs                                   |   35 +
 src/Bro.Device.Gocator/msvcp120.dll                        |    0 
 src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj     |   40 +
 src/Bro.Common.Device/DeviceBase/CameraBase.cs             |  125 +++
 M071.sln                                                   |  126 ---
 src/Bro.Device.Gocator/msvcr120.dll                        |    0 
 src/GocatorTest/GocatorTest.csproj                         |   94 ++
 src/Bro.Common.Model/Interface/IRunCtrl.cs                 |   16 
 src/Bro.Device.Gocator/GocatorConfig.cs                    |   66 +
 src/Bro.UI.Config/Bro.UI.Config.csproj                     |   77 ++
 50 files changed, 1,766 insertions(+), 232 deletions(-)

diff --git a/M071.sln b/M071.sln
index 78da12e..a9fb730 100644
--- a/M071.sln
+++ b/M071.sln
@@ -31,184 +31,74 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bro.Device.Gocator", "src\Bro.Device.Gocator\Bro.Device.Gocator.csproj", "{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GocatorTest", "src\GocatorTest\GocatorTest.csproj", "{CD0809C4-6E03-4F04-8806-59C29A4C54CE}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
 		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
-		Release|Any CPU = Release|Any CPU
 		Release|x64 = Release|x64
-		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|x64.Build.0 = Debug|Any CPU
-		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Debug|x86.Build.0 = Debug|Any CPU
-		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|Any CPU.Build.0 = Release|Any CPU
 		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x64.ActiveCfg = Release|Any CPU
 		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x64.Build.0 = Release|Any CPU
-		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x86.ActiveCfg = Release|Any CPU
-		{987308DD-8BAA-463A-94E2-77D62E01A5BF}.Release|x86.Build.0 = Release|Any CPU
-		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|x64.Build.0 = Debug|Any CPU
-		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Debug|x86.Build.0 = Debug|Any CPU
-		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|Any CPU.Build.0 = Release|Any CPU
 		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x64.ActiveCfg = Release|Any CPU
 		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x64.Build.0 = Release|Any CPU
-		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x86.ActiveCfg = Release|Any CPU
-		{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}.Release|x86.Build.0 = Release|Any CPU
-		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|x64.Build.0 = Debug|Any CPU
-		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Debug|x86.Build.0 = Debug|Any CPU
-		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|Any CPU.Build.0 = Release|Any CPU
 		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|x64.ActiveCfg = Release|Any CPU
 		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|x64.Build.0 = Release|Any CPU
-		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|x86.ActiveCfg = Release|Any CPU
-		{5D6BD683-98B6-4D69-9FB7-7BC5AFF13FC4}.Release|x86.Build.0 = Release|Any CPU
-		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|x64.Build.0 = Debug|Any CPU
-		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Debug|x86.Build.0 = Debug|Any CPU
-		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|Any CPU.Build.0 = Release|Any CPU
 		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|x64.ActiveCfg = Release|Any CPU
 		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|x64.Build.0 = Release|Any CPU
-		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|x86.ActiveCfg = Release|Any CPU
-		{45C51C86-9767-49C7-B2C3-2E9F60098E65}.Release|x86.Build.0 = Release|Any CPU
-		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|x64.Build.0 = Debug|Any CPU
-		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Debug|x86.Build.0 = Debug|Any CPU
-		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|Any CPU.Build.0 = Release|Any CPU
 		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x64.ActiveCfg = Release|Any CPU
 		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x64.Build.0 = Release|Any CPU
-		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x86.ActiveCfg = Release|Any CPU
-		{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}.Release|x86.Build.0 = Release|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|x64.Build.0 = Debug|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|x86.Build.0 = Debug|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|x64.ActiveCfg = Debug|x64
+		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Debug|x64.Build.0 = Debug|x64
 		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x64.ActiveCfg = Release|Any CPU
 		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x64.Build.0 = Release|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x86.ActiveCfg = Release|Any CPU
-		{DD02C60E-560B-40C0-AD7F-523F0B4AA4FD}.Release|x86.Build.0 = Release|Any CPU
-		{E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|x64.Build.0 = Debug|Any CPU
-		{E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{E6429C64-92B3-46A2-B35E-579856D47F62}.Debug|x86.Build.0 = Debug|Any CPU
-		{E6429C64-92B3-46A2-B35E-579856D47F62}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{E6429C64-92B3-46A2-B35E-579856D47F62}.Release|Any CPU.Build.0 = Release|Any CPU
 		{E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x64.ActiveCfg = Release|Any CPU
 		{E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x64.Build.0 = Release|Any CPU
-		{E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x86.ActiveCfg = Release|Any CPU
-		{E6429C64-92B3-46A2-B35E-579856D47F62}.Release|x86.Build.0 = Release|Any CPU
-		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|x64.Build.0 = Debug|Any CPU
-		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Debug|x86.Build.0 = Debug|Any CPU
-		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|Any CPU.Build.0 = Release|Any CPU
 		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x64.ActiveCfg = Release|Any CPU
 		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x64.Build.0 = Release|Any CPU
-		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x86.ActiveCfg = Release|Any CPU
-		{741F6491-57C7-479A-B391-09BBA9FBA9DC}.Release|x86.Build.0 = Release|Any CPU
-		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x64.Build.0 = Debug|Any CPU
-		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Debug|x86.Build.0 = Debug|Any CPU
-		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|Any CPU.Build.0 = Release|Any CPU
 		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x64.ActiveCfg = Release|Any CPU
 		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x64.Build.0 = Release|Any CPU
-		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x86.ActiveCfg = Release|Any CPU
-		{B536003E-70BA-4701-B8FD-BAFA303AB4E2}.Release|x86.Build.0 = Release|Any CPU
-		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x64.Build.0 = Debug|Any CPU
-		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Debug|x86.Build.0 = Debug|Any CPU
-		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|Any CPU.Build.0 = Release|Any CPU
 		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x64.ActiveCfg = Release|Any CPU
 		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x64.Build.0 = Release|Any CPU
-		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x86.ActiveCfg = Release|Any CPU
-		{230B0FFF-F6AF-45FE-AAF7-B4B66250DD58}.Release|x86.Build.0 = Release|Any CPU
-		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x64.Build.0 = Debug|Any CPU
-		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Debug|x86.Build.0 = Debug|Any CPU
-		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|Any CPU.Build.0 = Release|Any CPU
 		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x64.ActiveCfg = Release|Any CPU
 		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x64.Build.0 = Release|Any CPU
-		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x86.ActiveCfg = Release|Any CPU
-		{AD645C48-5811-4B1E-B81F-D35D5E6B577F}.Release|x86.Build.0 = Release|Any CPU
-		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x64.Build.0 = Debug|Any CPU
-		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Debug|x86.Build.0 = Debug|Any CPU
-		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|Any CPU.Build.0 = Release|Any CPU
 		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x64.ActiveCfg = Release|Any CPU
 		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x64.Build.0 = Release|Any CPU
-		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x86.ActiveCfg = Release|Any CPU
-		{65302D6E-9918-4E4C-92B4-75C8830C6BA7}.Release|x86.Build.0 = Release|Any CPU
-		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|x64.Build.0 = Debug|Any CPU
-		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Debug|x86.Build.0 = Debug|Any CPU
-		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|Any CPU.Build.0 = Release|Any CPU
 		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|x64.ActiveCfg = Release|Any CPU
 		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|x64.Build.0 = Release|Any CPU
-		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|x86.ActiveCfg = Release|Any CPU
-		{B50C1309-495C-4ADF-8A3D-6F6A06CCC4CC}.Release|x86.Build.0 = Release|Any CPU
-		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|x64.ActiveCfg = Debug|Any CPU
 		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|x64.Build.0 = Debug|Any CPU
-		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Debug|x86.Build.0 = Debug|Any CPU
-		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|Any CPU.Build.0 = Release|Any CPU
 		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|x64.ActiveCfg = Release|Any CPU
 		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|x64.Build.0 = Release|Any CPU
-		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|x86.ActiveCfg = Release|Any CPU
-		{112009F0-7902-454B-9A6C-A3AFC8FA8FFF}.Release|x86.Build.0 = Release|Any CPU
+		{CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug|x64.ActiveCfg = Debug|x64
+		{CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Debug|x64.Build.0 = Debug|x64
+		{CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Release|x64.ActiveCfg = Release|x64
+		{CD0809C4-6E03-4F04-8806-59C29A4C54CE}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/libs/gocator/GoSdk.dll b/libs/gocator/GoSdk.dll
new file mode 100644
index 0000000..48da5a1
--- /dev/null
+++ b/libs/gocator/GoSdk.dll
Binary files differ
diff --git a/libs/gocator/GoSdkNet.dll b/libs/gocator/GoSdkNet.dll
new file mode 100644
index 0000000..0b7da13
--- /dev/null
+++ b/libs/gocator/GoSdkNet.dll
Binary files differ
diff --git a/libs/gocator/kApi.dll b/libs/gocator/kApi.dll
new file mode 100644
index 0000000..bf166fe
--- /dev/null
+++ b/libs/gocator/kApi.dll
Binary files differ
diff --git a/libs/gocator/kApiNet.dll b/libs/gocator/kApiNet.dll
new file mode 100644
index 0000000..972a085
--- /dev/null
+++ b/libs/gocator/kApiNet.dll
Binary files differ
diff --git a/libs/gocator/msvcp120.dll b/libs/gocator/msvcp120.dll
new file mode 100644
index 0000000..4ea1efa
--- /dev/null
+++ b/libs/gocator/msvcp120.dll
Binary files differ
diff --git a/libs/gocator/msvcr120.dll b/libs/gocator/msvcr120.dll
new file mode 100644
index 0000000..d711c92
--- /dev/null
+++ b/libs/gocator/msvcr120.dll
Binary files differ
diff --git a/src/Bro.Common.Device/Bro.Common.Device.csproj b/src/Bro.Common.Device/Bro.Common.Device.csproj
index b01c57c..bc55f15 100644
--- a/src/Bro.Common.Device/Bro.Common.Device.csproj
+++ b/src/Bro.Common.Device/Bro.Common.Device.csproj
@@ -38,6 +38,49 @@
   <PropertyGroup>
     <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="Autofac, Version=4.9.4.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Autofac.4.9.4\lib\net45\Autofac.dll</HintPath>
diff --git a/src/Bro.Common.Device/DeviceBase/CameraBase.cs b/src/Bro.Common.Device/DeviceBase/CameraBase.cs
index 5673c27..b479b33 100644
--- a/src/Bro.Common.Device/DeviceBase/CameraBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/CameraBase.cs
@@ -13,6 +13,7 @@
 using System.Drawing.Imaging;
 using System.IO;
 using System.Linq;
+using System.Runtime.InteropServices;
 using System.Threading;
 using System.Threading.Tasks;
 using static Bro.Common.Helper.EnumHelper;
@@ -483,6 +484,110 @@
 
         private System.Threading.Timer clearImageTimer = null;
         #endregion
+
+        #region 鍥剧墖杞崲
+        [DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
+        public static extern void CopyMemory(IntPtr dest, IntPtr src, long count);
+
+        protected async void Generate8GrayImageByPointer(int width, int height, IntPtr dataPtr, string imgSetId)
+        {
+            await Task.Run(() =>
+            {
+                //************************Mono8 杞� Bitmap*******************************
+                Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
+                Bitmap showImage = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
+
+                ColorPalette cp = bmp.Palette;
+                for (int i = 0; i < 256; i++)
+                {
+                    cp.Entries[i] = Color.FromArgb(i, i, i);
+                }
+                bmp.Palette = cp;
+
+                ColorPalette cp1 = showImage.Palette;
+                for (int i = 0; i < 256; i++)
+                {
+                    cp1.Entries[i] = Color.FromArgb(i, i, i);
+                }
+                showImage.Palette = cp1;
+
+                long[] ptr = new long[3];
+                Rectangle rect = new Rectangle(0, 0, width, height);
+                BitmapData bitmapData = bmp.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
+                BitmapData showImageData = showImage.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
+                int PixelSize = Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8;
+
+                if (width % 4 == 0)
+                {
+                    CopyMemory(bitmapData.Scan0, dataPtr, width * height * PixelSize);
+                    CopyMemory(showImageData.Scan0, dataPtr, width * height * PixelSize);
+                }
+                else
+                {
+                    ptr[0] = bitmapData.Scan0.ToInt64();
+                    ptr[1] = showImageData.Scan0.ToInt64();
+                    ptr[2] = (long)dataPtr;
+                    for (int i = 0; i < height - 1; i++)
+                    {
+                        ptr[2] += width;
+
+                        CopyMemory((IntPtr)ptr[0], (IntPtr)ptr[2], width * PixelSize);
+                        CopyMemory((IntPtr)ptr[1], (IntPtr)ptr[2], width * PixelSize);
+                        ptr[0] += bitmapData.Stride;
+                        ptr[1] += showImageData.Stride;
+                    }
+                }
+                bmp.UnlockBits(bitmapData);
+                showImage.UnlockBits(showImageData);
+
+                SaveOriginImage(bmp, showImage, imgSetId);
+            });
+        }
+
+        protected async void Generate16GrayImageByPointer(int width, int height, IntPtr dataPtr, string imgSetId)
+        {
+            await Task.Run(() =>
+            {
+                int widthIn4 = (int)Math.Ceiling(width / 4.0) * 4;
+
+                Bitmap bmp = new Bitmap(widthIn4, height, PixelFormat.Format48bppRgb);
+                Bitmap showImage = new Bitmap(widthIn4, height, PixelFormat.Format48bppRgb);
+
+                Rectangle rect = new Rectangle(0, 0, widthIn4, height);
+                BitmapData bitmapData = bmp.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format48bppRgb);
+                BitmapData showImageData = showImage.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format48bppRgb);
+                unsafe
+                {
+                    byte* data = (byte*)dataPtr;
+                    byte* bitmapBuffer = (byte*)bitmapData.Scan0;
+                    byte* showBitmapBuffer = (byte*)showImageData.Scan0;
+
+                    //Parallel.For(0, height, i =>
+                    //      {
+                    //          Parallel.For(0, width, j =>
+                    //            {
+                    //                showBitmapBuffer[(i * widthIn4 + j) * 6] = bitmapBuffer[(i * widthIn4 + j) * 6] = data[(i * width + j) * 2];
+                    //                showBitmapBuffer[(i * widthIn4 + j) * 6 + 1] = bitmapBuffer[(i * widthIn4 + j) * 6 + 1] = data[(i * width + j) * 2 + 1];
+                    //            });
+                    //      });
+
+                    Parallel.For(0, width * height, i =>
+                      {
+                          int index = (i + 1) % width + widthIn4 * ((i + 1) / width) - 1;
+
+                          showBitmapBuffer[index * 6] = data[i * 2];
+                          showBitmapBuffer[index * 6 + 1] = data[i * 2 + 1];
+                      });
+                }
+                
+                bmp.UnlockBits(bitmapData);
+                showImage.UnlockBits(showImageData);
+
+                //showImage.Save(@"D:\1.bmp", ImageFormat.Bmp);
+                SaveOriginImage(bmp, showImage, imgSetId);
+            });
+        }
+        #endregion
     }
 
     #region Config
@@ -496,7 +601,7 @@
         [Category("鍙栧儚閰嶇疆")]
         [Description("鏇濆厜")]
         [DisplayName("鏇濆厜")]
-        public float Exposure
+        public virtual float Exposure
         {
             get => exposure;
             set
@@ -515,17 +620,17 @@
         [Category("鍙栧儚閰嶇疆")]
         [Description("澧炵泭")]
         [DisplayName("澧炵泭")]
-        public float Gain { get; set; }
+        public virtual float Gain { get; set; }
 
         [Category("鍙栧儚閰嶇疆")]
         [Description("鏇濆厜淇敼鍚庣瓑寰呮椂闂达紝鍗曚綅ms銆傞拡瀵归儴鍒嗗満鏅‘淇濇洕鍏変慨鏀瑰強鏃剁敓鏁堛��")]
         [DisplayName("鏇濆厜绛夊緟")]
-        public int ExposureWaitTime { get; set; }
+        public virtual int ExposureWaitTime { get; set; }
 
         [Category("鍙栧儚閰嶇疆")]
         [Description("鎷嶆憚鍚庢洕鍏夊�笺�傚彲鍦ㄤ竴娆℃媿鎽勫悗灏嗘洕鍏変慨鏀逛负涓嬫鎷嶆憚鐨勬洕鍏夊�硷紝鑺傜害鏇濆厜鐢熸晥鏃堕棿銆�")]
         [DisplayName("鎷嶆憚鍚庢洕鍏�")]
-        public float ExposureAfterSnap { get; set; }
+        public virtual float ExposureAfterSnap { get; set; }
 
         [Category("绠楁硶閰嶇疆")]
         [Description("绠楁硶璺緞")]
@@ -581,35 +686,35 @@
         [Category("鐩告満璁剧疆")]
         [Description("鐩告満IP鍦板潃")]
         [DisplayName("鐩告満IP鍦板潃")]
-        public string CameraIP { get; set; }
+        public virtual string CameraIP { get; set; }
 
         [Category("鐩告満璁剧疆")]
         [Description("涓婁綅鏈篒P鍦板潃")]
         [DisplayName("涓婁綅鏈篒P鍦板潃")]
-        public string ComputerIP { get; set; }
+        public virtual string ComputerIP { get; set; }
 
         [Category("淇濆瓨璁剧疆")]
         [Description("鍥剧墖淇濆瓨鐩綍")]
         [DisplayName("鍥剧墖淇濆瓨鐩綍")]
         [Editor(typeof(FoldDialogEditor), typeof(UITypeEditor))]
-        public string ImgDirectory { get; set; } = @"../Images";
+        public virtual string ImgDirectory { get; set; } = @"../Images";
 
         [Category("淇濆瓨璁剧疆")]
         [Description("鍥剧墖淇濆瓨澶╂暟")]
         [DisplayName("鍥剧墖淇濆瓨澶╂暟")]
-        public int SaveImageDayLimit { get; set; } = 0;
+        public virtual int SaveImageDayLimit { get; set; } = 0;
 
         [Category("淇濆瓨璁剧疆")]
         [Description("鍥剧墖淇濆瓨榛樿閰嶇疆锛屼富瑕佺敤浜庣‖瑙﹀彂绛夋病鏈夋槑纭搷浣滈厤缃鏄庣殑鍥剧墖淇濆瓨")]
         [DisplayName("鍥剧墖淇濆瓨榛樿閰嶇疆")]
         [TypeConverter(typeof(ComplexObjectConvert))]
         [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))]
-        public ImageSaveOption ImageSaveOption { get; set; } = new ImageSaveOption();
+        public virtual ImageSaveOption ImageSaveOption { get; set; } = new ImageSaveOption();
 
         [Category("鎷嶆憚璁剧疆")]
         [Description("榛樿鏇濆厜鍊硷紝鐩告満寮�鍚悗灏辫缃鏇濆厜鍊�")]
         [DisplayName("榛樿鏇濆厜鍊�")]
-        public float DefaultExposure { get; set; }
+        public virtual float DefaultExposure { get; set; }
     }
     #endregion
 
diff --git a/src/Bro.Common.Model/Bro.Common.Model.csproj b/src/Bro.Common.Model/Bro.Common.Model.csproj
index 1f91dd4..547c452 100644
--- a/src/Bro.Common.Model/Bro.Common.Model.csproj
+++ b/src/Bro.Common.Model/Bro.Common.Model.csproj
@@ -32,6 +32,46 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="Autofac, Version=4.9.4.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Autofac.4.9.4\lib\net45\Autofac.dll</HintPath>
diff --git a/src/Bro.Common.Model/Interface/IRunCtrl.cs b/src/Bro.Common.Model/Interface/IRunCtrl.cs
index b450dfe..9b088f7 100644
--- a/src/Bro.Common.Model/Interface/IRunCtrl.cs
+++ b/src/Bro.Common.Model/Interface/IRunCtrl.cs
@@ -3,11 +3,17 @@
     public interface IRunCtrl
     {
         IDevice Device { get; set; }
+
+        //IOperationConfig OpConfig { get; set; }
+
+        //void UploadOperationConfig(IOperationConfig opConfig);
+
+        //IOperationConfig GetOperationConfig();
     }
 
-    public interface IEditCtrl
-    {
-        IRunCtrl RunCtrl { get; set; }
-        IOperationConfig OpConfig { get; set; }
-    }
+    //public interface IEditCtrl
+    //{
+    //    IRunCtrl RunCtrl { get; set; }
+    //    IOperationConfig OpConfig { get; set; }
+    //}
 }
diff --git a/src/Bro.Device.Gocator/Bro.Device.Gocator.csproj b/src/Bro.Device.Gocator/Bro.Device.Gocator.csproj
index c3a0b6a..ea7b73b 100644
--- a/src/Bro.Device.Gocator/Bro.Device.Gocator.csproj
+++ b/src/Bro.Device.Gocator/Bro.Device.Gocator.csproj
@@ -21,6 +21,7 @@
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <PlatformTarget>x64</PlatformTarget>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <DebugType>pdbonly</DebugType>
@@ -30,9 +31,38 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+  </PropertyGroup>
   <ItemGroup>
+    <Reference Include="GoSdkNet">
+      <HintPath>..\..\libs\gocator\GoSdkNet.dll</HintPath>
+    </Reference>
+    <Reference Include="kApiNet">
+      <HintPath>..\..\libs\gocator\kApiNet.dll</HintPath>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -54,6 +84,24 @@
       <Project>{1a3cbfe7-3f78-42c3-95c5-10360450dbea}</Project>
       <Name>Bro.Common.Model</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Bro.UI.Device.Winform\Bro.UI.Device.Winform.csproj">
+      <Project>{E6429C64-92B3-46A2-B35E-579856D47F62}</Project>
+      <Name>Bro.UI.Device.Winform</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="GoSdk.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="kApi.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="msvcp120.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <Content Include="msvcr120.dll">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git a/src/Bro.Device.Gocator/GoSdk.dll b/src/Bro.Device.Gocator/GoSdk.dll
new file mode 100644
index 0000000..48da5a1
--- /dev/null
+++ b/src/Bro.Device.Gocator/GoSdk.dll
Binary files differ
diff --git a/src/Bro.Device.Gocator/GocatorConfig.cs b/src/Bro.Device.Gocator/GocatorConfig.cs
index 6dba56f..b6d73ac 100644
--- a/src/Bro.Device.Gocator/GocatorConfig.cs
+++ b/src/Bro.Device.Gocator/GocatorConfig.cs
@@ -1,7 +1,10 @@
 锘縰sing Bro.Common.Base;
+using Bro.Common.Base.UI;
 using Bro.Common.Helper;
+using Bro.Common.Interface;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -11,10 +14,73 @@
     [Device("Gocator", "Gocator婵�鍏夋壂鎻忎华", EnumHelper.DeviceAttributeType.InitialConfig)]
     public class GocatorInitialConfig : CameraInitialConfigBase
     {
+        #region Not used
+        [Browsable(false)]
+        public override string SerialNum { get; set; }
+        [Browsable(false)]
+        public override string ComputerIP { get; set; }
+        #endregion
+
+        [Category("璁$畻璁剧疆")]
+        [Description("true锛氳绠楁椂浣跨敤鍔犻�熷櫒锛宖alse锛氫笉浣跨敤鍔犻�熷櫒")]
+        [DefaultValue(false)]
+        public bool IsUseAccelerator { get; set; } = false;
+
+        [Category("鎷嶆憚璁剧疆")]
+        [Description("榛樿Job")]
+        [DisplayName("榛樿Job")]
+        [DefaultValue("")]
+        public string DefaultJob { get; set; } = "";
+
+        [Category("鎷嶆憚璁剧疆")]
+        [Description("鍙栧儚瓒呮椂璁剧疆锛屽崟浣峬s")]
+        [DefaultValue(1000)]
+        public int SnapshotTimeout { get; set; } = 1000;
+
+        //[Category("閲囧浘妯″紡")]
+        //[Description("鏄惁纭Е鍙戞ā寮忋�倀rue锛氱‖瑙﹀彂锛沠alse锛氳蒋瑙﹀彂")]
+        //[DisplayName("纭Е鍙�")]
+        //public bool IsHardwareTrigger { get; set; } = false;
+
+        [Category("閲囧浘妯″紡")]
+        [Description("true锛氬紓姝�/琚姩閲囧浘妯″紡  false锛氬悓姝�/涓诲姩閲囧浘妯″紡")]
+        [DefaultValue(false)]
+        public bool IsAsyncMode { get; set; } = false;
     }
 
     [Device("Gocator", "Gocator婵�鍏夋壂鎻忎华", EnumHelper.DeviceAttributeType.OperationConfig)]
     public class GocatorOperationConfig : CameraOprerationConfigBase
     {
+        [Category("绠楁硶閰嶇疆")]
+        [Description("鍒囨崲Job鍚嶇О")]
+        public string JobName { get; set; }
+
+        [Category("鍙栧儚閰嶇疆")]
+        [Description("true: 鍙栧儚鎿嶄綔 false: 涓嶆槸鍙栧儚鎿嶄綔")]
+        public bool IsSnapshotAction { get; set; }
+
+        [Category("鍙栧儚閰嶇疆")]
+        [Description("true: 杩炴帴鎿嶄綔 false: 鏂紑杩炴帴鎿嶄綔")]
+        public bool IsOpenConnection { get; set; }
+
+        public new string GetDisplayText()
+        {
+            return $"{(IsSnapshotAction ? "鍙栧儚鎿嶄綔" : "")} {(IsOpenConnection ? "寮�濮嬭繛鎺�" : "")} 绠楁硶锛歿AlgorithemPath}";
+        }
+
+        #region Not used
+        [Browsable(false)]
+        public override float ExposureAfterSnap { get; set; }
+        [Browsable(false)]
+        public override int ExposureWaitTime { get; set; }
+        [Browsable(false)]
+        public override float Gain { get; set; }
+        #endregion
+    }
+
+    [Device("Gocator", "Gocator婵�鍏夋壂鎻忎华", EnumHelper.DeviceAttributeType.RunCtrl)]
+    public class GocatorRunCtrl : CtrlCameraRunBase
+    {
+        public GocatorRunCtrl(IDevice device) : base(device) { }
     }
 }
diff --git a/src/Bro.Device.Gocator/GocatorDriver.cs b/src/Bro.Device.Gocator/GocatorDriver.cs
index 0290bd1..bdfac10 100644
--- a/src/Bro.Device.Gocator/GocatorDriver.cs
+++ b/src/Bro.Device.Gocator/GocatorDriver.cs
@@ -1,9 +1,14 @@
 锘縰sing Bro.Common.Base;
 using Bro.Common.Helper;
 using Bro.Common.Interface;
+using Lmi3d.GoSdk;
+using Lmi3d.GoSdk.Messages;
+using Lmi3d.Zen;
+using Lmi3d.Zen.Io;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Runtime.InteropServices;
 using System.Text;
 using System.Threading.Tasks;
 
@@ -12,34 +17,236 @@
     [Device("Gocator", "Gocator婵�鍏夋壂鎻忎华", EnumHelper.DeviceAttributeType.Device)]
     public class GocatorDriver : CameraBase
     {
+        #region CameraBase
         public override IOperationConfig GetOperationConfigFromDevice()
         {
-            throw new NotImplementedException();
+            var opConfig = new GocatorOperationConfig();
+            GoSetup setup = sensor.Setup;
+            opConfig.Exposure = (float)setup.GetExposure(GoRole.Main);
+            opConfig.JobName = sensor.DefaultJob;
+
+            return opConfig;
         }
 
         public override void Snapshot()
         {
-            throw new NotImplementedException();
+            if (IIConfig.IsAsyncMode)
+            {
+
+            }
+            else
+            {
+                GoDataSet dataSet = null;
+
+                try
+                {
+                    dataSet = system.ReceiveData(IIConfig.SnapshotTimeout);
+                }
+                catch (Exception ex)
+                {
+                    LogAsync(DateTime.Now, $"{Name}鑾峰彇鍥惧儚寮傚父", ex.GetExceptionMessage());
+                    return;
+                }
+
+                HandleGoData(dataSet);
+            }
         }
 
+        private void HandleGoData(GoDataSet dataSet)
+        {
+            if (dataSet == null)
+                return;
+
+            for (UInt32 i = 0; i < dataSet.Count; i++)
+            {
+                GoDataMsg dataObj = (GoDataMsg)dataSet.Get(i);
+                switch (dataObj.MessageType)
+                {
+                    //case GoDataMessageType.Stamp:
+                    //    {
+                    //        GoStampMsg stampMsg = (GoStampMsg)dataObj;
+                    //        for (UInt32 j = 0; j < stampMsg.Count; j++)
+                    //        {
+                    //            GoStamp stamp = stampMsg.Get(j);
+                    //            Console.WriteLine("Frame Index = {0}", stamp.FrameIndex);
+                    //            Console.WriteLine("Time Stamp = {0}", stamp.Timestamp);
+                    //            Console.WriteLine("Encoder Value = {0}", stamp.Encoder);
+                    //        }
+                    //    }
+                    //    break;
+                    case GoDataMessageType.Surface:
+                        {
+                            GoSurfaceMsg surfaceMsg = (GoSurfaceMsg)dataObj;
+                            long width = surfaceMsg.Width;
+                            long height = surfaceMsg.Length;
+                            long bufferSize = width * height;
+                            IntPtr bufferPointer = surfaceMsg.Data;
+
+                            //Console.WriteLine("Whole Part Height Map received:");
+                            //Console.WriteLine(" Buffer width: {0}", width);
+                            //Console.WriteLine(" Buffer height: {0}", height);
+
+                            //short[] ranges = new short[bufferSize];
+                            //Marshal.Copy(bufferPointer, ranges, 0, ranges.Length);
+
+                            Generate16GrayImageByPointer((int)(width / 1), (int)(height / 1), bufferPointer, "");
+                        }
+                        break;
+                        //case GoDataMessageType.SurfaceIntensity:
+                        //    {
+                        //        GoSurfaceIntensityMsg surfaceMsg = (GoSurfaceIntensityMsg)dataObj;
+                        //        long width = surfaceMsg.Width;
+                        //        long height = surfaceMsg.Length;
+                        //        long bufferSize = width * height;
+                        //        IntPtr bufferPointeri = surfaceMsg.Data;
+
+                        //        //Console.WriteLine("Whole Part Intensity Image received:");
+                        //        //Console.WriteLine(" Buffer width: {0}", width);
+                        //        //Console.WriteLine(" Buffer height: {0}", height);
+                        //        //byte[] ranges = new byte[bufferSize];
+                        //        //Marshal.Copy(bufferPointeri, ranges, 0, ranges.Length);
+                        //        //GenerateGrayImageByPointer((int)width, (int)height, bufferPointeri, "");
+                        //    }
+                        //    break;
+                }
+            }
+        }
+
+        public override ImageSet Snapshot(IOperationConfig config)
+        {
+            ImageSet imgSet = base.Snapshot(config);
+
+            return imgSet;
+        }
+
+
+        float _currentExposure = 0;
+        string _currentJob = "";
         public override void UploadOperationConfig(IOperationConfig config)
         {
-            throw new NotImplementedException();
+            if (config is GocatorOperationConfig opConfig)
+            {
+                if (opConfig.Exposure > 0 && opConfig.Exposure != _currentExposure)
+                {
+                    sensor.Setup.SetExposure(GoRole.Main, opConfig.Exposure);
+                    _currentExposure = opConfig.Exposure;
+                }
+
+                if (!string.IsNullOrWhiteSpace(opConfig.JobName) && _currentJob != opConfig.JobName)
+                {
+                    _currentJob = sensor.DefaultJob = opConfig.JobName;
+                }
+
+                sensor.Flush();
+            }
         }
 
         protected override void Init()
         {
-            throw new NotImplementedException();
+            KApiLib.Construct();
+            GoSdkLib.Construct();
+
+            system = new GoSystem();
+
+            if (IIConfig.IsUseAccelerator)
+            {
+                accelerator = new GoAccelerator();
+            }
+
+            KIpAddress ip = KIpAddress.Parse(IConfig.CameraIP);
+
+            if (IIConfig.IsUseAccelerator)
+            {
+                accelerator.Start();
+            }
+
+            sensor = system.FindSensorByIpAddress(ip);
+
+            if (IIConfig.IsUseAccelerator)
+            {
+                accelerator.Attach(sensor);
+            }
+            sensor.Connect();
+
+            if (IIConfig.IsUseAccelerator)
+            {
+                sensor.Flush();
+                accelerator.Start();
+            }
+
+            sensor.Setup.ScanMode = GoMode.Surface;
+
+            system.EnableData(true);
+
+            if (IIConfig.IsAsyncMode)
+            {
+                system.SetDataHandler(onData);
+            }
+
+            _currentExposure = (float)sensor.Setup.GetExposure(GoRole.Main);
+            if (IIConfig.DefaultExposure > 0 && _currentExposure != IIConfig.DefaultExposure)
+            {
+                sensor.Setup.SetExposure(GoRole.Main, IIConfig.DefaultExposure);
+                _currentExposure = (float)sensor.Setup.GetExposure(GoRole.Main);
+            }
+
+            _currentJob = sensor.DefaultJob;
+            if (!string.IsNullOrWhiteSpace(IIConfig.DefaultJob) && _currentJob != IIConfig.DefaultJob)
+            {
+                _currentJob = sensor.DefaultJob = IIConfig.DefaultJob;
+            }
+
+            sensor.Flush();
+        }
+
+        protected override void Start()
+        {
+            base.Start();
+
+            if (IIConfig.IsAsyncMode)
+                system.Start();
+        }
+
+        protected override void Stop()
+        {
+            base.Stop();
+
+            if (IIConfig.IsAsyncMode)
+                system.Stop();
+
+            if (IIConfig.IsUseAccelerator)
+            {
+                accelerator.Stop();
+            }
+
+            sensor.Disconnect();
         }
 
         protected override void Pause()
         {
-            throw new NotImplementedException();
         }
 
         protected override void Resume()
         {
-            throw new NotImplementedException();
+        }
+        #endregion
+
+        GoSystem system = null;
+        GoAccelerator accelerator = null;
+        GoSensor sensor = null;
+
+        public GocatorInitialConfig IIConfig
+        {
+            get => InitialConfig as GocatorInitialConfig;
+        }
+
+        /// <summary>
+        /// 寮傛妯″紡鑾峰彇鏁版嵁
+        /// </summary>
+        /// <param name="data"></param>
+        private void onData(KObject data)
+        {
+            GoDataSet dataSet = (GoDataSet)data;
         }
     }
 }
diff --git a/src/Bro.Device.Gocator/kApi.dll b/src/Bro.Device.Gocator/kApi.dll
new file mode 100644
index 0000000..bf166fe
--- /dev/null
+++ b/src/Bro.Device.Gocator/kApi.dll
Binary files differ
diff --git a/src/Bro.Device.Gocator/msvcp120.dll b/src/Bro.Device.Gocator/msvcp120.dll
new file mode 100644
index 0000000..4ea1efa
--- /dev/null
+++ b/src/Bro.Device.Gocator/msvcp120.dll
Binary files differ
diff --git a/src/Bro.Device.Gocator/msvcr120.dll b/src/Bro.Device.Gocator/msvcr120.dll
new file mode 100644
index 0000000..d711c92
--- /dev/null
+++ b/src/Bro.Device.Gocator/msvcr120.dll
Binary files differ
diff --git a/src/Bro.Device.HikCamera/Bro.Device.HikCamera.csproj b/src/Bro.Device.HikCamera/Bro.Device.HikCamera.csproj
index 0850bff..fe771d3 100644
--- a/src/Bro.Device.HikCamera/Bro.Device.HikCamera.csproj
+++ b/src/Bro.Device.HikCamera/Bro.Device.HikCamera.csproj
@@ -31,6 +31,49 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="halcondotnet, Version=12.0.0.0, Culture=neutral, PublicKeyToken=4973bed59ddbf2b8, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
diff --git a/src/Bro.Device.HikCamera/HikCameraDriver.cs b/src/Bro.Device.HikCamera/HikCameraDriver.cs
index 57aebcd..02864f5 100644
--- a/src/Bro.Device.HikCamera/HikCameraDriver.cs
+++ b/src/Bro.Device.HikCamera/HikCameraDriver.cs
@@ -324,7 +324,7 @@
                 NewImageSet(set);
                 OnHImageOutput?.BeginInvoke(this, hImage, set.Id, null, null);
 
-                HikToBitmap(nWidth, nHeight, pData, set.Id);
+                Generate8GrayImageByPointer(nWidth, nHeight, pData, set.Id);
             }
             else
             {
@@ -382,7 +382,7 @@
                         uint nHeight = pFrameInfo.nHeight;
 
                         //HikToBitmap(pFrameInfo, frameInfo.pBufAddr);
-                        HikToBitmap((int)nWidth, (int)nHeight, frameInfo.pBufAddr, "");
+                        Generate8GrayImageByPointer((int)nWidth, (int)nHeight, frameInfo.pBufAddr, "");
                     }
                 }
             }
@@ -437,71 +437,13 @@
 
                         set.HImage = hImage;
 
-                        HikToBitmap((int)nWidth, (int)nHeight, frameInfo.pBufAddr, set.Id);
+                        Generate8GrayImageByPointer((int)nWidth, (int)nHeight, frameInfo.pBufAddr, set.Id);
                         return set;
                     }
                 }
             }
 
             throw new Exception($"Grap Image Failed:{nRet:x8}");
-        }
-
-        [DllImport("kernel32.dll", EntryPoint = "CopyMemory", SetLastError = false)]
-        public static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
-
-        private async void HikToBitmap(int width, int height, IntPtr dataPtr, string imgSetId)
-        {
-            await Task.Run(() =>
-            {
-                //************************Mono8 杞� Bitmap*******************************
-                Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
-                Bitmap showImage = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
-
-                ColorPalette cp = bmp.Palette;
-                for (int i = 0; i < 256; i++)
-                {
-                    cp.Entries[i] = Color.FromArgb(i, i, i);
-                }
-                bmp.Palette = cp;
-
-                ColorPalette cp1 = showImage.Palette;
-                for (int i = 0; i < 256; i++)
-                {
-                    cp1.Entries[i] = Color.FromArgb(i, i, i);
-                }
-                showImage.Palette = cp1;
-
-                int[] ptr = new int[3];
-                Rectangle rect = new Rectangle(0, 0, width, height);
-                BitmapData bitmapData = bmp.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
-                BitmapData showImageData = showImage.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
-                int PixelSize = Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8;
-
-                if (width % 4 == 0)
-                {
-                    CopyMemory(bitmapData.Scan0, dataPtr, (uint)(width * height * PixelSize));
-                    CopyMemory(showImageData.Scan0, dataPtr, (uint)(width * height * PixelSize));
-                }
-                else
-                {
-                    ptr[0] = bitmapData.Scan0.ToInt32();
-                    ptr[1] = showImageData.Scan0.ToInt32();
-                    ptr[2] = (int)dataPtr;
-                    for (int i = 0; i < height - 1; i++)
-                    {
-                        ptr[2] += width;
-
-                        CopyMemory((IntPtr)ptr[0], (IntPtr)ptr[2], (uint)(width * PixelSize));
-                        CopyMemory((IntPtr)ptr[1], (IntPtr)ptr[2], (uint)(width * PixelSize));
-                        ptr[0] += bitmapData.Stride;
-                        ptr[1] += showImageData.Stride;
-                    }
-                }
-                bmp.UnlockBits(bitmapData);
-                showImage.UnlockBits(showImageData);
-
-                SaveOriginImage(bmp, showImage, imgSetId);
-            });
         }
 
         readonly MyCamera device = new MyCamera();
diff --git a/src/Bro.Device.SchneiderPLC/Bro.Device.SchneiderPLC.csproj b/src/Bro.Device.SchneiderPLC/Bro.Device.SchneiderPLC.csproj
index d43a332..e3e1b1a 100644
--- a/src/Bro.Device.SchneiderPLC/Bro.Device.SchneiderPLC.csproj
+++ b/src/Bro.Device.SchneiderPLC/Bro.Device.SchneiderPLC.csproj
@@ -29,6 +29,46 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />
diff --git a/src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj b/src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj
index 32fb634..5bb2a9a 100644
--- a/src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj
+++ b/src/Bro.M071.Process.DBManager/Bro.M071.DBManager.csproj
@@ -33,6 +33,46 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
       <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath>
diff --git a/src/Bro.M071.Process.Model/Bro.M071.Model.csproj b/src/Bro.M071.Process.Model/Bro.M071.Model.csproj
index 335fb1c..6b7c29c 100644
--- a/src/Bro.M071.Process.Model/Bro.M071.Model.csproj
+++ b/src/Bro.M071.Process.Model/Bro.M071.Model.csproj
@@ -34,6 +34,46 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
       <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath>
diff --git a/src/Bro.M071.Process/Bro.M071.Process.csproj b/src/Bro.M071.Process/Bro.M071.Process.csproj
index e276212..c4f1e16 100644
--- a/src/Bro.M071.Process/Bro.M071.Process.csproj
+++ b/src/Bro.M071.Process/Bro.M071.Process.csproj
@@ -35,6 +35,46 @@
   <PropertyGroup>
     <StartupObject />
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="Autofac, Version=4.9.4.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Autofac.4.9.4\lib\net45\Autofac.dll</HintPath>
@@ -61,6 +101,9 @@
     <Reference Include="System.Net.Http" />
     <Reference Include="System.Windows.Forms" />
     <Reference Include="System.Xml" />
+    <Reference Include="WeifenLuo.WinFormsUI.Docking, Version=3.0.6.0, Culture=neutral, PublicKeyToken=5cded1a1a0a7b481, processorArchitecture=MSIL">
+      <HintPath>..\..\packages\DockPanelSuite.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Compile Include="M071Converters.cs" />
@@ -68,6 +111,13 @@
     <Compile Include="M071Models.cs" />
     <Compile Include="M071Process.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UI\M071Node.cs" />
+    <Compile Include="UI\M071_MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\M071_MainForm.Designer.cs">
+      <DependentUpon>M071_MainForm.cs</DependentUpon>
+    </Compile>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -101,6 +151,10 @@
       <Project>{197C5AA8-9609-4D1C-B1E3-5879006EAAF4}</Project>
       <Name>Bro.Process</Name>
     </ProjectReference>
+    <ProjectReference Include="..\Bro.UI.Model.Winform\Bro.UI.Model.Winform.csproj">
+      <Project>{741F6491-57C7-479A-B391-09BBA9FBA9DC}</Project>
+      <Name>Bro.UI.Model.Winform</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index 13fde83..fbdd8fe 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -10,6 +10,7 @@
 using System.IO;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 
 namespace Bro.M071.Process
@@ -138,8 +139,6 @@
         //}
         #endregion
 
-        //Dictionary<string, ProductionMeasurement> MeasureDict = new Dictionary<string, ProductionMeasurement>();
-
         private string barCode = "";
         public string BarCode
         {
@@ -168,17 +167,7 @@
             measurements.ForEach(m =>
             {
                 m.InitialKeyUnitMeasureChanged();
-                //m.KeyUnitCollection.ForEach(k => k.InitialMeasureValueDictPropertyChanged());
             });
-
-            //MeasureDict[BarCode] = new ProductionMeasurement()
-            //{
-            //    Barcode = BarCode,
-            //    Measurements = measurements,
-            //};
-
-            //MeasureDict[BarCode].InitialMeasurementsPropertyChanged();
-            //MeasureDict[BarCode].PropertyChanged += MeasureProduction_PropertyChanged;
 
             var pMeasure = new ProductionMeasurement()
             {
@@ -191,6 +180,8 @@
 
             Config.SnapshotPointCollection.Where(u => u.IsEnabled).ToList().ForEach(s =>
                   {
+                      _pauseHandle.WaitHandle.WaitOne();
+
                       IDevice device = DeviceCollection.FirstOrDefault(u => u.Id == s.MotionDevice);
                       if (device == null)
                           throw new ProcessException($"{s.Name}鎷嶇収鐐逛綅鏈缃繍鍔ㄨ澶�");
@@ -220,6 +211,39 @@
             return new ProcessResponse(true);
         }
 
+        /// <summary>
+        /// 鏆傚仠鏍囧織  
+        /// WaitHandle 鏆傚仠鍙ユ焺  榛樿涓洪潪闃诲 鍙墽琛�
+        /// WaitResult 鏆傚仠鏍囧織 true 姝e父鎵ц  false 鏆傚仠涓�
+        /// </summary>
+        ManualWaitConfirm _pauseHandle = new ManualWaitConfirm()
+        {
+            WaitHandle = new ManualResetEvent(true),
+            WaitResult = true,
+        };
+
+        [ProcessMethod("", "PauseJob", "鏆傚仠娴佺▼", InvokeType.TestInvoke)]
+        public ProcessResponse PauseJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (_pauseHandle.WaitResult)
+            {
+                #region 鏉垮崱鏆傚仠鍔ㄤ綔
+                #endregion
+
+                _pauseHandle.WaitHandle.Reset();
+            }
+            else
+            {
+                #region 鏉垮崱鎭㈠鍔ㄤ綔
+                #endregion
+
+                _pauseHandle.WaitHandle.Set();
+            }
+
+            _pauseHandle.WaitResult = !_pauseHandle.WaitResult;
+            return new ProcessResponse(_pauseHandle.WaitResult);
+        }
+        #region 绉佹湁鏂规硶
         private void MeasureProduction_PropertyChanged(object sender, PropertyChangedEventArgs e)
         {
             if (sender is ProductionMeasurement pMeasure)
@@ -384,5 +408,6 @@
                      imgSet.HImage.Dispose();
              });
         }
+        #endregion
     }
 }
diff --git a/src/Bro.M071.Process/UI/M071Node.cs b/src/Bro.M071.Process/UI/M071Node.cs
new file mode 100644
index 0000000..05abc96
--- /dev/null
+++ b/src/Bro.M071.Process/UI/M071Node.cs
@@ -0,0 +1,15 @@
+锘縰sing Bro.Common.Interface;
+using Bro.UI.Model.Winform;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Bro.M071.Process.UI
+{
+    [MenuNode("M071Node", "閿洏妫�娴�", 3, "", false)]
+    public class M071Node : IMenuNode
+    {
+    }
+}
diff --git a/src/Bro.M071.Process/UI/M071_MainForm.Designer.cs b/src/Bro.M071.Process/UI/M071_MainForm.Designer.cs
new file mode 100644
index 0000000..45eef01
--- /dev/null
+++ b/src/Bro.M071.Process/UI/M071_MainForm.Designer.cs
@@ -0,0 +1,39 @@
+锘縩amespace Bro.M071.Process.UI
+{
+    partial class M071_MainForm
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (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()
+        {
+            this.components = new System.ComponentModel.Container();
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(800, 450);
+            this.Text = "M071_MainForm";
+        }
+
+        #endregion
+    }
+}
\ No newline at end of file
diff --git a/src/Bro.M071.Process/UI/M071_MainForm.cs b/src/Bro.M071.Process/UI/M071_MainForm.cs
new file mode 100644
index 0000000..92c0b25
--- /dev/null
+++ b/src/Bro.M071.Process/UI/M071_MainForm.cs
@@ -0,0 +1,22 @@
+锘縰sing Bro.UI.Model.Winform;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Bro.M071.Process.UI
+{
+    [MenuNode("M071_MainForm", "閿洏妫�娴嬩富鐣岄潰", 3, "M071Node", true)]
+    public partial class M071_MainForm : MenuFrmBase
+    {
+        public M071_MainForm()
+        {
+            InitializeComponent();
+        }
+    }
+}
diff --git a/src/Bro.M071.Process/packages.config b/src/Bro.M071.Process/packages.config
index d386c7e..a5ede62 100644
--- a/src/Bro.M071.Process/packages.config
+++ b/src/Bro.M071.Process/packages.config
@@ -1,5 +1,7 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="Autofac" version="4.9.4" targetFramework="net452" />
+  <package id="DockPanelSuite" version="3.0.6" targetFramework="net452" />
   <package id="Newtonsoft.Json" version="11.0.2" targetFramework="net452" />
+  <package id="WeifenLuo.WinFormsUI.Docking" version="2.1.0" targetFramework="net452" />
 </packages>
\ No newline at end of file
diff --git a/src/Bro.Process.DBManager/Bro.Process.DataBase.csproj b/src/Bro.Process.DBManager/Bro.Process.DataBase.csproj
index 1d3988a..c2ecbbd 100644
--- a/src/Bro.Process.DBManager/Bro.Process.DataBase.csproj
+++ b/src/Bro.Process.DBManager/Bro.Process.DataBase.csproj
@@ -33,6 +33,46 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
       <HintPath>..\..\packages\EntityFramework.6.4.0\lib\net45\EntityFramework.dll</HintPath>
diff --git a/src/Bro.Process/Bro.Process.csproj b/src/Bro.Process/Bro.Process.csproj
index fe1f2f0..81759b6 100644
--- a/src/Bro.Process/Bro.Process.csproj
+++ b/src/Bro.Process/Bro.Process.csproj
@@ -33,6 +33,46 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="Autofac, Version=4.9.4.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Autofac.4.9.4\lib\net45\Autofac.dll</HintPath>
diff --git a/src/Bro.UI.Config/App.config b/src/Bro.UI.Config/App.config
index 794cd25..208a5c1 100644
--- a/src/Bro.UI.Config/App.config
+++ b/src/Bro.UI.Config/App.config
@@ -1,10 +1,23 @@
-锘�<?xml version="1.0" encoding="utf-8" ?>
+锘�<?xml version="1.0" encoding="utf-8"?>
 <configuration>
-    <startup> 
-        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
-    </startup>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
+  </startup>
   <appSettings>
-    <add key="AuthorityCheck" value="False"/>
-    <add key="AuthorityServer" value="192.168.1.255:11001"/>
+    <add key="AuthorityCheck" value="False" />
+    <add key="AuthorityServer" value="192.168.1.255:11001" />
+    <add key="ClientSettingsProvider.ServiceUri" value="" />
   </appSettings>
+  <system.web>
+    <membership defaultProvider="ClientAuthenticationMembershipProvider">
+      <providers>
+        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
+      </providers>
+    </membership>
+    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
+      <providers>
+        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
+      </providers>
+    </roleManager>
+  </system.web>
 </configuration>
\ No newline at end of file
diff --git a/src/Bro.UI.Config/Bro.UI.Config.csproj b/src/Bro.UI.Config/Bro.UI.Config.csproj
index 52bed1c..d465720 100644
--- a/src/Bro.UI.Config/Bro.UI.Config.csproj
+++ b/src/Bro.UI.Config/Bro.UI.Config.csproj
@@ -12,16 +12,31 @@
     <FileAlignment>512</FileAlignment>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
     <Deterministic>true</Deterministic>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
+    <PlatformTarget>x64</PlatformTarget>
     <DebugSymbols>true</DebugSymbols>
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
     <OutputPath>..\Debug\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
+    <WarningLevel>2</WarningLevel>
     <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
@@ -35,6 +50,51 @@
   </PropertyGroup>
   <PropertyGroup>
     <ApplicationIcon>Logo.ico</ApplicationIcon>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <WarningLevel>2</WarningLevel>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <WarningLevel>2</WarningLevel>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>true</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <WarningLevel>2</WarningLevel>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>true</Prefer32Bit>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Autofac, Version=4.9.4.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
@@ -53,6 +113,7 @@
     <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>..\..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
     </Reference>
+    <Reference Include="System.Web.Extensions" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
@@ -213,5 +274,17 @@
     <Content Include="Logo2.ico" />
     <None Include="Resources\load.bmp" />
   </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
+      <Visible>False</Visible>
+      <ProductName>Microsoft .NET Framework 4.5.2 %28x86 鍜� x64%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
 </Project>
\ No newline at end of file
diff --git a/src/Bro.UI.Config/MenuForms/FrmOperation.cs b/src/Bro.UI.Config/MenuForms/FrmOperation.cs
index 74ba196..9175789 100644
--- a/src/Bro.UI.Config/MenuForms/FrmOperation.cs
+++ b/src/Bro.UI.Config/MenuForms/FrmOperation.cs
@@ -140,10 +140,12 @@
 
             btnStart.Enabled = false;
 
+            //Task.Run(() =>
+            //{
             try
             {
                 //if (Process.ProcessState != EnumHelper.DeviceState.DSOpen)
-                if(isStart)
+                if (isStart)
                 {
                     ProcessOperation(true);
                 }
@@ -160,8 +162,9 @@
             }
             finally
             {
-                btnStart.Enabled = true;
+                this.BeginInvoke(new Action(() => btnStart.Enabled = true));
             }
+            //});
         }
 
         string _currentProcssCode = "";
@@ -248,21 +251,28 @@
             {
                 Process.Open();
 
+                //this.BeginInvoke(new Action(() =>
+                //{
                 btnStart.Text = "  鍋�  姝�";
                 btnStart.ImageIndex = 1;
                 btnStart.BackColor = Color.FromArgb(0x7f, Color.LimeGreen);
 
                 btnLoad.Enabled = false;
+                //}));
+
             }
             else
             {
                 Process.Close();
 
+                //this.BeginInvoke(new Action(() =>
+                //{
                 btnStart.Text = "  鍚�  鍔�";
                 btnStart.ImageIndex = 0;
                 btnStart.BackColor = SystemColors.Control;
 
                 btnLoad.Enabled = true;
+                //}));
             }
         }
     }
diff --git a/src/Bro.UI.Config/MenuForms/FrmOperation.resx b/src/Bro.UI.Config/MenuForms/FrmOperation.resx
index 628ac3d..0e0a0e7 100644
--- a/src/Bro.UI.Config/MenuForms/FrmOperation.resx
+++ b/src/Bro.UI.Config/MenuForms/FrmOperation.resx
@@ -125,7 +125,7 @@
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm
-        CgAAAk1TRnQBSQFMAgEBAgEAAbgBAAG4AQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        CgAAAk1TRnQBSQFMAgEBAgEAAcABAAHAAQABGAEAARgBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
         AwABYAMAARgDAAEBAQABCAYAAQkYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
         AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
         AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -182,7 +182,7 @@
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD4
-        CAAAAk1TRnQBSQFMAwEBAAG4AQABuAEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+        CAAAAk1TRnQBSQFMAwEBAAHAAQABwAEAARgBAAEYAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
         AWADAAEYAwABAQEAAQgGAAEJGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
         AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
         AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
diff --git a/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj b/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
index acd878f..9419c55 100644
--- a/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
+++ b/src/Bro.UI.Device.Winform/Bro.UI.Device.Winform.csproj
@@ -30,6 +30,46 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />
diff --git a/src/Bro.UI.Device.Winform/CtrlCameraRunBase.Designer.cs b/src/Bro.UI.Device.Winform/CtrlCameraRunBase.Designer.cs
index 9dfdfdb..784f96b 100644
--- a/src/Bro.UI.Device.Winform/CtrlCameraRunBase.Designer.cs
+++ b/src/Bro.UI.Device.Winform/CtrlCameraRunBase.Designer.cs
@@ -42,9 +42,9 @@
             this.tssBtnCameraOp,
             this.tsTxtExposure,
             this.tsBtnModifyExposure});
-            this.toolStripOperation.Location = new System.Drawing.Point(38, 0);
+            this.toolStripOperation.Location = new System.Drawing.Point(38, 2);
             this.toolStripOperation.Name = "toolStripOperation";
-            this.toolStripOperation.Size = new System.Drawing.Size(440, 25);
+            this.toolStripOperation.Size = new System.Drawing.Size(440, 28);
             this.toolStripOperation.TabIndex = 0;
             this.toolStripOperation.Text = "toolStrip1";
             // 
@@ -56,7 +56,7 @@
             this.tssBtnCameraOp.Image = ((System.Drawing.Image)(resources.GetObject("tssBtnCameraOp.Image")));
             this.tssBtnCameraOp.ImageTransparentColor = System.Drawing.Color.Magenta;
             this.tssBtnCameraOp.Name = "tssBtnCameraOp";
-            this.tssBtnCameraOp.Size = new System.Drawing.Size(64, 22);
+            this.tssBtnCameraOp.Size = new System.Drawing.Size(64, 25);
             this.tssBtnCameraOp.Text = "鎷�    鐓�";
             this.tssBtnCameraOp.ToolTipText = "鐩告満妯″紡";
             this.tssBtnCameraOp.DropDownClosed += new System.EventHandler(this.tssBtnCameraOp_DropDownClosed);
@@ -96,13 +96,13 @@
             this.tsmiShowElements,
             this.tsmiShowStatusBar});
             this.ctmsVisibleControl.Name = "ctmsVisibleControl";
-            this.ctmsVisibleControl.Size = new System.Drawing.Size(181, 114);
+            this.ctmsVisibleControl.Size = new System.Drawing.Size(149, 92);
             // 
             // tsmiShowToolBar
             // 
             this.tsmiShowToolBar.CheckOnClick = true;
             this.tsmiShowToolBar.Name = "tsmiShowToolBar";
-            this.tsmiShowToolBar.Size = new System.Drawing.Size(180, 22);
+            this.tsmiShowToolBar.Size = new System.Drawing.Size(148, 22);
             this.tsmiShowToolBar.Text = "鏄剧ず宸ュ叿鏍�";
             this.tsmiShowToolBar.CheckedChanged += new System.EventHandler(this.tsmiShowToolBar_CheckedChanged);
             // 
@@ -110,7 +110,7 @@
             // 
             this.tsmiShowOpBar.CheckOnClick = true;
             this.tsmiShowOpBar.Name = "tsmiShowOpBar";
-            this.tsmiShowOpBar.Size = new System.Drawing.Size(180, 22);
+            this.tsmiShowOpBar.Size = new System.Drawing.Size(148, 22);
             this.tsmiShowOpBar.Text = "鏄剧ず鎿嶄綔鏍�";
             this.tsmiShowOpBar.CheckedChanged += new System.EventHandler(this.tsmiShowOpBar_CheckedChanged);
             // 
@@ -118,7 +118,7 @@
             // 
             this.tsmiShowElements.CheckOnClick = true;
             this.tsmiShowElements.Name = "tsmiShowElements";
-            this.tsmiShowElements.Size = new System.Drawing.Size(180, 22);
+            this.tsmiShowElements.Size = new System.Drawing.Size(148, 22);
             this.tsmiShowElements.Text = "鏄剧ず鍩哄厓鍒楄〃";
             this.tsmiShowElements.CheckedChanged += new System.EventHandler(this.tsmiShowElements_CheckedChanged);
             // 
@@ -126,7 +126,7 @@
             // 
             this.tsmiShowStatusBar.CheckOnClick = true;
             this.tsmiShowStatusBar.Name = "tsmiShowStatusBar";
-            this.tsmiShowStatusBar.Size = new System.Drawing.Size(180, 22);
+            this.tsmiShowStatusBar.Size = new System.Drawing.Size(148, 22);
             this.tsmiShowStatusBar.Text = "鏄剧ず鐘舵�佹爮";
             this.tsmiShowStatusBar.CheckedChanged += new System.EventHandler(this.tsmiShowStatusBar_CheckedChanged);
             // 
diff --git a/src/Bro.UI.Device.Winform/CtrlCameraRunBase.cs b/src/Bro.UI.Device.Winform/CtrlCameraRunBase.cs
index 624da37..c990ef1 100644
--- a/src/Bro.UI.Device.Winform/CtrlCameraRunBase.cs
+++ b/src/Bro.UI.Device.Winform/CtrlCameraRunBase.cs
@@ -249,5 +249,17 @@
             IsShowStatusBar = tsmiShowStatusBar.Checked;
         }
         #endregion
+        
+        public IOperationConfig OpConfig { get; set; }
+
+        public void UploadOperationConfig(IOperationConfig opConfig)
+        {
+            throw new NotImplementedException();
+        }
+
+        public IOperationConfig GetOperationConfig()
+        {
+            throw new NotImplementedException();
+        }
     }
 }
diff --git a/src/Bro.UI.Model.Winform/Bro.UI.Model.Winform.csproj b/src/Bro.UI.Model.Winform/Bro.UI.Model.Winform.csproj
index 200e67a..400bb5d 100644
--- a/src/Bro.UI.Model.Winform/Bro.UI.Model.Winform.csproj
+++ b/src/Bro.UI.Model.Winform/Bro.UI.Model.Winform.csproj
@@ -30,6 +30,46 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug1|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug1\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <LangVersion>7.3</LangVersion>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>..\..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
diff --git a/src/GocatorTest/App.config b/src/GocatorTest/App.config
new file mode 100644
index 0000000..88fa402
--- /dev/null
+++ b/src/GocatorTest/App.config
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/src/GocatorTest/Form1.Designer.cs b/src/GocatorTest/Form1.Designer.cs
new file mode 100644
index 0000000..3c37677
--- /dev/null
+++ b/src/GocatorTest/Form1.Designer.cs
@@ -0,0 +1,61 @@
+锘縩amespace GocatorTest
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// 蹇呴渶鐨勮璁″櫒鍙橀噺銆�
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 娓呯悊鎵�鏈夋鍦ㄤ娇鐢ㄧ殑璧勬簮銆�
+        /// </summary>
+        /// <param name="disposing">濡傛灉搴旈噴鏀炬墭绠¤祫婧愶紝涓� true锛涘惁鍒欎负 false銆�</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 绐椾綋璁捐鍣ㄧ敓鎴愮殑浠g爜
+
+        /// <summary>
+        /// 璁捐鍣ㄦ敮鎸佹墍闇�鐨勬柟娉� - 涓嶈淇敼
+        /// 浣跨敤浠g爜缂栬緫鍣ㄤ慨鏀规鏂规硶鐨勫唴瀹广��
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.button1 = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // button1
+            // 
+            this.button1.Location = new System.Drawing.Point(13, 50);
+            this.button1.Name = "button1";
+            this.button1.Size = new System.Drawing.Size(75, 23);
+            this.button1.TabIndex = 0;
+            this.button1.Text = "button1";
+            this.button1.UseVisualStyleBackColor = true;
+            this.button1.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(498, 450);
+            this.Controls.Add(this.button1);
+            this.Name = "Form1";
+            this.Text = "Form1";
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Button button1;
+    }
+}
+
diff --git a/src/GocatorTest/Form1.cs b/src/GocatorTest/Form1.cs
new file mode 100644
index 0000000..6fa54b6
--- /dev/null
+++ b/src/GocatorTest/Form1.cs
@@ -0,0 +1,35 @@
+锘縰sing Bro.Common.Base;
+using Bro.Device.Gocator;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace GocatorTest
+{
+    public partial class Form1 : Form
+    {
+        public Form1()
+        {
+            InitializeComponent();
+        }
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            GocatorDriver gocator = new GocatorDriver();
+
+            (gocator as DeviceBase).InitialConfig = new GocatorInitialConfig()
+            {
+                CameraIP="127.0.0.1"
+            };
+
+            gocator.StateChange(Bro.Common.Helper.EnumHelper.DeviceState.DSInit);
+            gocator.StateChange(Bro.Common.Helper.EnumHelper.DeviceState.DSOpen);
+        }
+    }
+}
diff --git a/src/GocatorTest/Form1.resx b/src/GocatorTest/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/src/GocatorTest/Form1.resx
@@ -0,0 +1,120 @@
+锘�<?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>
+</root>
\ No newline at end of file
diff --git a/src/GocatorTest/GocatorTest.csproj b/src/GocatorTest/GocatorTest.csproj
new file mode 100644
index 0000000..20735c8
--- /dev/null
+++ b/src/GocatorTest/GocatorTest.csproj
@@ -0,0 +1,94 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{CD0809C4-6E03-4F04-8806-59C29A4C54CE}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>GocatorTest</RootNamespace>
+    <AssemblyName>GocatorTest</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <OutputPath>bin\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <OutputPath>bin\Release\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <PlatformTarget>x64</PlatformTarget>
+    <OutputPath>bin\x64\Release\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Bro.Common.Device\Bro.Common.Device.csproj">
+      <Project>{987308DD-8BAA-463A-94E2-77D62E01A5BF}</Project>
+      <Name>Bro.Common.Device</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Bro.Common.Model\Bro.Common.Model.csproj">
+      <Project>{1A3CBFE7-3F78-42C3-95C5-10360450DBEA}</Project>
+      <Name>Bro.Common.Model</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\Bro.Device.Gocator\Bro.Device.Gocator.csproj">
+      <Project>{112009f0-7902-454b-9a6c-a3afc8fa8fff}</Project>
+      <Name>Bro.Device.Gocator</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/src/GocatorTest/Program.cs b/src/GocatorTest/Program.cs
new file mode 100644
index 0000000..be79987
--- /dev/null
+++ b/src/GocatorTest/Program.cs
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace GocatorTest
+{
+    static class Program
+    {
+        /// <summary>
+        /// 搴旂敤绋嬪簭鐨勪富鍏ュ彛鐐广��
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new Form1());
+        }
+    }
+}
diff --git a/src/GocatorTest/Properties/AssemblyInfo.cs b/src/GocatorTest/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..4061b69
--- /dev/null
+++ b/src/GocatorTest/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+锘縰sing System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 鏈夊叧绋嬪簭闆嗙殑涓�鑸俊鎭敱浠ヤ笅
+// 鎺у埗銆傛洿鏀硅繖浜涚壒鎬у�煎彲淇敼
+// 涓庣▼搴忛泦鍏宠仈鐨勪俊鎭��
+[assembly: AssemblyTitle("GocatorTest")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("GocatorTest")]
+[assembly: AssemblyCopyright("Copyright 漏  2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 灏� ComVisible 璁剧疆涓� false 浼氫娇姝ょ▼搴忛泦涓殑绫诲瀷
+//瀵� COM 缁勪欢涓嶅彲瑙併�傚鏋滈渶瑕佷粠 COM 璁块棶姝ょ▼搴忛泦涓殑绫诲瀷
+//璇峰皢姝ょ被鍨嬬殑 ComVisible 鐗规�ц缃负 true銆�
+[assembly: ComVisible(false)]
+
+// 濡傛灉姝ら」鐩悜 COM 鍏紑锛屽垯涓嬪垪 GUID 鐢ㄤ簬绫诲瀷搴撶殑 ID
+[assembly: Guid("cd0809c4-6e03-4f04-8806-59c29a4c54ce")]
+
+// 绋嬪簭闆嗙殑鐗堟湰淇℃伅鐢变笅鍒楀洓涓�肩粍鎴�: 
+//
+//      涓荤増鏈�
+//      娆$増鏈�
+//      鐢熸垚鍙�
+//      淇鍙�
+//
+//鍙互鎸囧畾鎵�鏈夎繖浜涘�硷紝涔熷彲浠ヤ娇鐢ㄢ�滅敓鎴愬彿鈥濆拰鈥滀慨璁㈠彿鈥濈殑榛樿鍊�
+//閫氳繃浣跨敤 "*"锛屽涓嬫墍绀�:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/GocatorTest/Properties/Resources.Designer.cs b/src/GocatorTest/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..a36b89a
--- /dev/null
+++ b/src/GocatorTest/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�: 4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳藉鑷翠笉姝g‘鐨勮涓猴紝濡傛灉
+//     閲嶆柊鐢熸垚浠g爜锛屽垯鎵�鍋氭洿鏀瑰皢涓㈠け銆�
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace GocatorTest.Properties
+{
+
+
+    /// <summary>
+    ///   寮虹被鍨嬭祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲瀛楃涓茬瓑銆�
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栧垹闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛� ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GocatorTest.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   瑕嗙洊褰撳墠绾跨▼鐨� CurrentUICulture 灞炴��
+        ///   浣跨敤姝ゅ己绫诲瀷鐨勮祫婧愮被鐨勮祫婧愭煡鎵俱��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/src/GocatorTest/Properties/Resources.resx b/src/GocatorTest/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/src/GocatorTest/Properties/Resources.resx
@@ -0,0 +1,117 @@
+锘�<?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.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="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </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" 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>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/src/GocatorTest/Properties/Settings.Designer.cs b/src/GocatorTest/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..30684ca
--- /dev/null
+++ b/src/GocatorTest/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace GocatorTest.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
diff --git a/src/GocatorTest/Properties/Settings.settings b/src/GocatorTest/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/src/GocatorTest/Properties/Settings.settings
@@ -0,0 +1,7 @@
+锘�<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

--
Gitblit v1.8.0