diff --git a/labs/CameraCard/CameraCard/CameraCard.csproj b/labs/CameraCard/CameraCard/CameraCard.csproj
index c6d40714..34e8b98c 100644
--- a/labs/CameraCard/CameraCard/CameraCard.csproj
+++ b/labs/CameraCard/CameraCard/CameraCard.csproj
@@ -95,12 +95,19 @@
IdCard.cs
+
+
+ Form
+
+
+ LoadingForm.cs
+
Form
@@ -124,6 +131,9 @@
IdCard.cs
+
+ LoadingForm.cs
+
LoginForm.cs
@@ -173,6 +183,7 @@
+
PreserveNewest
diff --git a/labs/CameraCard/CameraCard/Infrastructure/FormExtensions.cs b/labs/CameraCard/CameraCard/Infrastructure/FormExtensions.cs
new file mode 100644
index 00000000..32d40b57
--- /dev/null
+++ b/labs/CameraCard/CameraCard/Infrastructure/FormExtensions.cs
@@ -0,0 +1,42 @@
+using CameraCard;
+using System;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+public static class FormExtensions
+{
+ public static void Run(this Form form, Action action)
+ {
+ form.BeginInvoke(action);
+ }
+
+ public static void CloseForm(this Form form)
+ {
+ form.Invoke(new Action(() =>
+ {
+ if (form.IsHandleCreated)
+ {
+ form.Close();
+ }
+ }));
+ }
+
+ public static void RunWithLoading(this Form form, Action action, string title = "加载中")
+ {
+ var loading = new LoadingForm(title);
+ form.Run(() => loading.ShowDialog());
+ Task.Run(() =>
+ {
+ try
+ {
+ form.Invoke(action);
+ loading.CloseForm();
+ }
+ catch (Exception ex)
+ {
+ loading.CloseForm();
+ MessageBox.Show(ex.Message);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/labs/CameraCard/CameraCard/LoadingForm.Designer.cs b/labs/CameraCard/CameraCard/LoadingForm.Designer.cs
new file mode 100644
index 00000000..1ebf4deb
--- /dev/null
+++ b/labs/CameraCard/CameraCard/LoadingForm.Designer.cs
@@ -0,0 +1,61 @@
+namespace CameraCard
+{
+ partial class LoadingForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoadingForm));
+ this.label1 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.Image = ((System.Drawing.Image)(resources.GetObject("label1.Image")));
+ this.label1.Location = new System.Drawing.Point(55, 11);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(48, 48);
+ this.label1.TabIndex = 0;
+ //
+ // LoadingForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(164, 68);
+ this.Controls.Add(this.label1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
+ this.Name = "LoadingForm";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "加载中";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ }
+}
\ No newline at end of file
diff --git a/labs/CameraCard/CameraCard/LoadingForm.cs b/labs/CameraCard/CameraCard/LoadingForm.cs
new file mode 100644
index 00000000..c5dcacf3
--- /dev/null
+++ b/labs/CameraCard/CameraCard/LoadingForm.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Windows.Forms;
+
+namespace CameraCard
+{
+ public partial class LoadingForm : Form
+ {
+ public LoadingForm(string title = "加载中")
+ {
+ InitializeComponent();
+ this.ControlBox = false;
+ this.Text = title;
+ }
+ }
+}
\ No newline at end of file
diff --git a/labs/CameraCard/CameraCard/LoadingForm.resx b/labs/CameraCard/CameraCard/LoadingForm.resx
new file mode 100644
index 00000000..870bcfcb
--- /dev/null
+++ b/labs/CameraCard/CameraCard/LoadingForm.resx
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ R0lGODlhMAAwAOZ8APv7+0BAQH9/f8HBwc/Pz/z8/Orq6vX19fj4+MfHx/b29uDg4PHx8eTk5NXV1f39
+ /fPz887Ozvf39/n5+ebm5tra2tfX1/T09MbGxsDAwN7e3uLi4uHh4d3d3YODg+Pj46CgoPLy8kFBQYSE
+ hMjIyLW1tdbW1tzc3Pr6+qysrEZGRggICFlZWbCwsJ+fn5CQkOfn53Fxce3t7YCAgKenp8rKyp2dnZSU
+ lAkJCcTExO/v70dHR+Xl5dPT0319faOjo9LS0u7u7oeHh7a2tjw8PNjY2ElJSY+Pj29vbz8/P6urq4mJ
+ iZubm1ZWVry8vAICAoqKiq2trY6OjlhYWDs7OyAgIOjo6K+vr2xsbG1tbYKCgnl5eURERAEBAR0dHYiI
+ iD09PVVVVevr6wYGBo2NjYaGhh4eHiEhIb29vaGhoa6urhwcHHp6ent7e83NzZycnPDw8NnZ2QUFBTo6
+ OrS0tHBwcNHR0UpKSkhISOnp6b+/vwAAAP///wAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtY
+ TVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlk
+ Ij8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBD
+ b3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpS
+ REYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4g
+ PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5j
+ b20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5
+ cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHht
+ cE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpGOTdGMTE3NDA3MjA2ODExOEMxNEY4RUMxQzI3
+ NjA5QiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyRjZBRjBDOERDN0YxMUUxQTBEOUM1RTUwRkEz
+ REE3QSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyRjZBRjBDN0RDN0YxMUUxQTBEOUM1RTUwRkEz
+ REE3QSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHht
+ cE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjJCQzUxMUIwQTIwNjgxMThD
+ MTRGOEVDMUMyNzYwOUIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Rjk3RjExNzQwNzIwNjgxMThD
+ MTRGOEVDMUMyNzYwOUIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+
+ IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ
+ 2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56d
+ nJuamZiXlpWUk5KRkI+OjYyLiomIh4aFhIOCgYB/fn18e3p5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2Jh
+ YF9eXVxbWllYV1ZVVFNSUVBPTk1MS0pJSEdGRURDQkFAPz49PDs6OTg3NjU0MzIxMC8uLSwrKikoJyYl
+ JCMiISAfHh0cGxoZGBcWFRQTEhEQDw4NDAsKCQgHBgUEAwIBAAAh+QQJAAB8ACwAAAAAMAAwAAAH/4B8
+ goOEhYaHiImKi4yNjo0mXl4mj5WNSXt7SZacBwCGPJmZPIefnIYtASo0hSWieyWFGwN6DaeFXwG6P4Qu
+ ryCEC3rDFreEL7oBIpSCUa9RgwwZw3oVxoNDyQExgz2vPYME1HoU14JBXNoXg1WZVYMA4wMT5oJM2guD
+ SplKgwfjHeoJAoAl2QlCQIAQgkAtwgNONVqUiLDOn4cAO0IoAkDLgSlBEyhUsGALEQIBKAV4QFOAEICW
+ lh5ooEXtY6ECHlKitIHgWoEI4/QMUJRDJ8oU1xwE1bNh0YAZRmGeWpqP0QcQKUc8vEVTDwEGlSQYgKHg
+ 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
+ EggAOw==
+
+
+
\ No newline at end of file
diff --git a/labs/CameraCard/CameraCard/LoginForm.Designer.cs b/labs/CameraCard/CameraCard/LoginForm.Designer.cs
index 33561144..1ef30e18 100644
--- a/labs/CameraCard/CameraCard/LoginForm.Designer.cs
+++ b/labs/CameraCard/CameraCard/LoginForm.Designer.cs
@@ -41,47 +41,53 @@
// label1
//
this.label1.AutoSize = true;
+ this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.Location = new System.Drawing.Point(41, 56);
this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(53, 12);
+ this.label1.Size = new System.Drawing.Size(56, 17);
this.label1.TabIndex = 0;
this.label1.Text = "登录名:";
//
// userNameInput
//
+ this.userNameInput.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.userNameInput.Location = new System.Drawing.Point(96, 50);
this.userNameInput.Name = "userNameInput";
- this.userNameInput.Size = new System.Drawing.Size(157, 21);
+ this.userNameInput.Size = new System.Drawing.Size(157, 23);
this.userNameInput.TabIndex = 1;
//
// label2
//
this.label2.AutoSize = true;
+ this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.Location = new System.Drawing.Point(56, 18);
this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(197, 12);
+ this.label2.Size = new System.Drawing.Size(200, 17);
this.label2.TabIndex = 2;
this.label2.Text = "普通高中学业水平考试信息管理系统";
//
// label3
//
this.label3.AutoSize = true;
+ this.label3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label3.Location = new System.Drawing.Point(41, 105);
this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(41, 12);
+ this.label3.Size = new System.Drawing.Size(44, 17);
this.label3.TabIndex = 3;
this.label3.Text = "密码:";
//
// passwordInput
//
+ this.passwordInput.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.passwordInput.Location = new System.Drawing.Point(96, 100);
this.passwordInput.Name = "passwordInput";
this.passwordInput.PasswordChar = '*';
- this.passwordInput.Size = new System.Drawing.Size(157, 21);
+ this.passwordInput.Size = new System.Drawing.Size(157, 23);
this.passwordInput.TabIndex = 4;
//
// login
//
+ this.login.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.login.Location = new System.Drawing.Point(96, 149);
this.login.Name = "login";
this.login.Size = new System.Drawing.Size(157, 30);
@@ -93,20 +99,22 @@
// userNameValid
//
this.userNameValid.AutoSize = true;
+ this.userNameValid.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.userNameValid.ForeColor = System.Drawing.Color.Red;
this.userNameValid.Location = new System.Drawing.Point(96, 78);
this.userNameValid.Name = "userNameValid";
- this.userNameValid.Size = new System.Drawing.Size(29, 12);
+ this.userNameValid.Size = new System.Drawing.Size(32, 17);
this.userNameValid.TabIndex = 6;
this.userNameValid.Text = "验证";
//
// passwordValid
//
this.passwordValid.AutoSize = true;
+ this.passwordValid.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.passwordValid.ForeColor = System.Drawing.Color.Red;
this.passwordValid.Location = new System.Drawing.Point(95, 127);
this.passwordValid.Name = "passwordValid";
- this.passwordValid.Size = new System.Drawing.Size(29, 12);
+ this.passwordValid.Size = new System.Drawing.Size(32, 17);
this.passwordValid.TabIndex = 7;
this.passwordValid.Text = "验证";
//
diff --git a/labs/CameraCard/CameraCard/LoginForm.cs b/labs/CameraCard/CameraCard/LoginForm.cs
index 7e7276cc..a402486b 100644
--- a/labs/CameraCard/CameraCard/LoginForm.cs
+++ b/labs/CameraCard/CameraCard/LoginForm.cs
@@ -6,6 +6,7 @@ using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading;
+using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;
@@ -13,8 +14,6 @@ namespace CameraCard
{
public partial class LoginForm : Form
{
- private ProgressForm _progress;
-
public LoginForm()
{
InitializeComponent();
@@ -59,7 +58,6 @@ namespace CameraCard
var user = db.Users.FirstOrDefault(o => o.UserName == userName && o.Password == password);
if (user != null)
{
- this._progress?.SetProgress("本地登录成功", 100);
MainForm.User = user;
this.Hide();
new MainForm().Show();
@@ -71,10 +69,38 @@ namespace CameraCard
}
else
{
- this.BeginInvoke(new Action(() =>
+ var loading = new LoadingForm("登录中");
+ this.Run(() => loading.ShowDialog());
+ Task.Run(() =>
{
- this.LoginFromServer(userName, password);
- }));
+ try
+ {
+ this.LoginFromServer(userName, password);
+ loading.CloseForm();
+ var progress = new ProgressForm("更新中", "正在下载数据", 0, 100);
+ this.Run(() => progress.ShowDialog());
+ try
+ {
+ MainForm.LoadData(progress);
+ progress.CloseForm();
+ this.Invoke(new Action(() =>
+ {
+ this.Hide();
+ new MainForm().Show();
+ }));
+ }
+ catch (Exception ex)
+ {
+ progress.CloseForm();
+ MessageBox.Show(ex.Message);
+ }
+ }
+ catch (Exception ex)
+ {
+ loading.CloseForm();
+ MessageBox.Show(ex.Message);
+ }
+ });
}
}
}
@@ -82,81 +108,40 @@ namespace CameraCard
private void LoginFromServer(string userName, string password)
{
- if (this._progress == null)
+ var url = ConfigurationManager.AppSettings["login"];
+ var client = HttpClientFactory.Create();
+ var content = new StringContent(new JavaScriptSerializer().Serialize(new { userName = userName, password = password }), Encoding.UTF8, "application/json");
+ var response = client.PostAsync(url, content).Result;
+ if (response.StatusCode == HttpStatusCode.OK)
{
- var thread = new Thread(() =>
+ var result = new JavaScriptSerializer().Deserialize(response.Content.ReadAsStringAsync().Result);
+ if (result.code == 0)
{
- try
+ using (var db = new MyDbContext())
{
- this._progress?.SetProgress("正在登录,请稍候", 30);
- var url = ConfigurationManager.AppSettings["login"];
- var client = HttpClientFactory.Create();
- var content = new StringContent(new JavaScriptSerializer().Serialize(new { userName = userName, password = password }), Encoding.UTF8, "application/json");
- var response = client.PostAsync(url, content).Result;
- this._progress?.SetProgress("正在登录,请稍候", 50);
- if (response.StatusCode == HttpStatusCode.OK)
+ var user = db.Users.FirstOrDefault(o => o.UserName == userName);
+ if (user == null)
{
- var result = new JavaScriptSerializer().Deserialize(response.Content.ReadAsStringAsync().Result);
- if (result.code == 0)
- {
- using (var db = new MyDbContext())
- {
- var user = db.Users.FirstOrDefault(o => o.UserName == userName);
- if (user == null)
- {
- user = new User { UserName = userName, Password = password, PasswordHash = result.data };
- db.Users.Add(user);
- }
- else
- {
- user.Password = password;
- user.PasswordHash = result.data;
- }
- db.SaveChanges();
- MainForm.User = user;
- }
- this._progress?.SetProgress("登录成功,正在更新数据", 50);
- MainForm.LoadData(this._progress);
- this._progress?.SetProgress("数据更新完毕", 100);
- this._progress.CloseProgress();
- this.Invoke(new Action(() =>
- {
- this.Hide();
- new MainForm().Show();
- }));
- }
- else
- {
- MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}");
- this._progress?.SetProgress("登录失败", 100);
- this._progress.CloseProgress();
- }
+ user = new User { UserName = userName, Password = password, PasswordHash = result.data };
+ db.Users.Add(user);
}
else
{
- MessageBox.Show(response.Content.ReadAsStringAsync().Result);
- this._progress?.SetProgress("登录失败", 100);
- this._progress.CloseProgress();
+ user.Password = password;
+ user.PasswordHash = result.data;
}
+ db.SaveChanges();
+ MainForm.User = user;
}
- catch (ThreadAbortException ex)
- {
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- });
- this._progress = new ProgressForm("登录中", "正在登录,请稍候", 0, 100, this.Width, () =>
+ }
+ else
{
- this._progress = null;
- if (thread != null && thread.IsAlive)
- {
- thread.Abort();
- }
- });
- thread.Start();
- this._progress.ShowDialog();
+ MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}");
+ }
+ }
+ else
+ {
+ MessageBox.Show(response.Content.ReadAsStringAsync().Result);
}
}
@@ -167,5 +152,23 @@ namespace CameraCard
this.login_Click(sender, e);
}
}
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ var loading = new LoadingForm("登录中");
+ this.Run(() => loading.ShowDialog());
+ Task.Run(() =>
+ {
+ try
+ {
+ loading.CloseForm();
+ }
+ catch (Exception ex)
+ {
+ loading.CloseForm();
+ MessageBox.Show(ex.Message);
+ }
+ });
+ }
}
}
\ No newline at end of file
diff --git a/labs/CameraCard/CameraCard/MainForm.Designer.cs b/labs/CameraCard/CameraCard/MainForm.Designer.cs
index 0e1323ea..1feef1a6 100644
--- a/labs/CameraCard/CameraCard/MainForm.Designer.cs
+++ b/labs/CameraCard/CameraCard/MainForm.Designer.cs
@@ -76,7 +76,6 @@
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.versionLabel = new System.Windows.Forms.ToolStripStatusLabel();
- this.idCard = new CameraCard.IdCard();
this.StudentName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Sex = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.Nation = new System.Windows.Forms.DataGridViewTextBoxColumn();
@@ -89,6 +88,9 @@
this.HasChedked = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.HasUploaded = new System.Windows.Forms.DataGridViewCheckBoxColumn();
this.StudentId = new System.Windows.Forms.DataGridViewTextBoxColumn();
+ this.idCard = new CameraCard.IdCard();
+ this.push = new System.Windows.Forms.Button();
+ this.pull = new System.Windows.Forms.Button();
tab1 = new System.Windows.Forms.TabPage();
tab1.SuspendLayout();
this.idcGroupBox.SuspendLayout();
@@ -345,6 +347,8 @@
//
// tab3
//
+ this.tab3.Controls.Add(this.pull);
+ this.tab3.Controls.Add(this.push);
this.tab3.Controls.Add(this.totalPageValue);
this.tab3.Controls.Add(this.pageIndexSelector);
this.tab3.Controls.Add(this.pageMenu);
@@ -420,7 +424,7 @@
//
// searchBtn
//
- this.searchBtn.Location = new System.Drawing.Point(730, 18);
+ this.searchBtn.Location = new System.Drawing.Point(768, 18);
this.searchBtn.Name = "searchBtn";
this.searchBtn.Size = new System.Drawing.Size(75, 23);
this.searchBtn.TabIndex = 7;
@@ -430,7 +434,7 @@
//
// nameInput
//
- this.nameInput.Location = new System.Drawing.Point(457, 20);
+ this.nameInput.Location = new System.Drawing.Point(593, 20);
this.nameInput.Name = "nameInput";
this.nameInput.Size = new System.Drawing.Size(120, 21);
this.nameInput.TabIndex = 6;
@@ -438,7 +442,7 @@
// label3
//
this.label3.AutoSize = true;
- this.label3.Location = new System.Drawing.Point(398, 24);
+ this.label3.Location = new System.Drawing.Point(534, 24);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(41, 12);
this.label3.TabIndex = 5;
@@ -446,7 +450,7 @@
//
// numberInput
//
- this.numberInput.Location = new System.Drawing.Point(252, 21);
+ this.numberInput.Location = new System.Drawing.Point(388, 21);
this.numberInput.Name = "numberInput";
this.numberInput.Size = new System.Drawing.Size(120, 21);
this.numberInput.TabIndex = 4;
@@ -454,7 +458,7 @@
// label2
//
this.label2.AutoSize = true;
- this.label2.Location = new System.Drawing.Point(200, 24);
+ this.label2.Location = new System.Drawing.Point(336, 24);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(53, 12);
this.label2.TabIndex = 3;
@@ -463,7 +467,7 @@
// label1
//
this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(9, 24);
+ this.label1.Location = new System.Drawing.Point(145, 24);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(41, 12);
this.label1.TabIndex = 2;
@@ -473,7 +477,7 @@
//
this.classSelector.DisplayMember = "Class";
this.classSelector.FormattingEnabled = true;
- this.classSelector.Location = new System.Drawing.Point(56, 21);
+ this.classSelector.Location = new System.Drawing.Point(192, 21);
this.classSelector.Name = "classSelector";
this.classSelector.Size = new System.Drawing.Size(121, 20);
this.classSelector.TabIndex = 1;
@@ -628,13 +632,6 @@
this.versionLabel.Size = new System.Drawing.Size(14, 17);
this.versionLabel.Text = "v";
//
- // idCard
- //
- this.idCard.Location = new System.Drawing.Point(-1, 16);
- this.idCard.Name = "idCard";
- this.idCard.Size = new System.Drawing.Size(420, 200);
- this.idCard.TabIndex = 8;
- //
// StudentName
//
this.StudentName.DataPropertyName = "Name";
@@ -723,6 +720,32 @@
this.StudentId.ReadOnly = true;
this.StudentId.Visible = false;
//
+ // idCard
+ //
+ this.idCard.Location = new System.Drawing.Point(-1, 16);
+ this.idCard.Name = "idCard";
+ this.idCard.Size = new System.Drawing.Size(420, 200);
+ this.idCard.TabIndex = 8;
+ //
+ // push
+ //
+ this.push.Location = new System.Drawing.Point(893, 19);
+ this.push.Name = "push";
+ this.push.Size = new System.Drawing.Size(75, 23);
+ this.push.TabIndex = 14;
+ this.push.Text = "上传";
+ this.push.UseVisualStyleBackColor = true;
+ //
+ // pull
+ //
+ this.pull.Location = new System.Drawing.Point(20, 18);
+ this.pull.Name = "pull";
+ this.pull.Size = new System.Drawing.Size(75, 23);
+ this.pull.TabIndex = 15;
+ this.pull.Text = "下载";
+ this.pull.UseVisualStyleBackColor = true;
+ this.pull.Click += new System.EventHandler(this.pull_Click);
+ //
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@@ -819,5 +842,7 @@
private System.Windows.Forms.DataGridViewCheckBoxColumn HasChedked;
private System.Windows.Forms.DataGridViewCheckBoxColumn HasUploaded;
private System.Windows.Forms.DataGridViewTextBoxColumn StudentId;
+ private System.Windows.Forms.Button pull;
+ private System.Windows.Forms.Button push;
}
}
\ No newline at end of file
diff --git a/labs/CameraCard/CameraCard/MainForm.cs b/labs/CameraCard/CameraCard/MainForm.cs
index 4efa8944..932d385d 100644
--- a/labs/CameraCard/CameraCard/MainForm.cs
+++ b/labs/CameraCard/CameraCard/MainForm.cs
@@ -21,7 +21,6 @@ namespace CameraCard
public partial class MainForm : Form
{
private ICameraHelper _cameraHelper = new OpenCvSharpCameraHelper();
-
private CVRHelper _cvrHelper = new CVRHelper();
public MainForm()
@@ -178,36 +177,45 @@ namespace CameraCard
public static void LoadData(ProgressForm progress)
{
- var url = ConfigurationManager.AppSettings["pull"];
- var client = HttpClientFactory.Create();
- var content = new StringContent(new JavaScriptSerializer().Serialize(new { userName = MainForm.User.UserName }), Encoding.UTF8, "application/json");
- var response = client.PostAsync(url, content).Result;
- var result = new JavaScriptSerializer().Deserialize(response.Content.ReadAsStringAsync().Result);
- if (result.code == 0)
+ try
{
- using (var db = new MyDbContext())
+ var url = ConfigurationManager.AppSettings["pull"];
+ var client = HttpClientFactory.Create();
+ var content = new StringContent(new JavaScriptSerializer().Serialize(new { userName = MainForm.User.UserName }), Encoding.UTF8, "application/json");
+ var response = client.PostAsync(url, content).Result;
+ var result = new JavaScriptSerializer().Deserialize(response.Content.ReadAsStringAsync().Result);
+ if (result.code == 0)
{
- foreach (var item in result.data)
+ using (var db = new MyDbContext())
{
- var entity = db.Students.FirstOrDefault(o => o.Id == item.Id);
- if (entity == null)
- {
- entity = item;
- db.Students.Add(entity);
- progress?.SetProgress($"正在加载{entity.Name}", 50);
- }
- else
+ int i = 1;
+ foreach (var item in result.data)
{
- progress?.SetProgress($"正在更新{entity.Name}", 50);
- entity.Adapt(item);
+ var entity = db.Students.FirstOrDefault(o => o.Id == item.Id);
+ if (entity == null)
+ {
+ entity = item;
+ db.Students.Add(entity);
+ progress?.SetProgress($"正在加载{entity.Name}", i * 100 / result.data.Count);
+ }
+ else
+ {
+ progress?.SetProgress($"正在更新{entity.Name}", i * 100 / result.data.Count);
+ entity.Adapt(item);
+ }
+ db.SaveChanges();
+ i++;
}
- db.SaveChanges();
}
}
+ else
+ {
+ MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}");
+ }
}
- else
+ catch (Exception ex)
{
- MessageBox.Show($"错误代码:{result.code},错误消息:{result.message}");
+ MessageBox.Show(ex.Message);
}
}
@@ -340,210 +348,192 @@ namespace CameraCard
{
if (e.TabPage.Text == "采集进度")
{
- RefreshGroup();
+ this.RunWithLoading(RefreshGroup);
}
else if (e.TabPage.Text == "图像管理")
{
- RefreshData();
+ this.RunWithLoading(RefreshData);
}
}
private void RefreshGroup()
{
- this._progress = new ProgressForm("加载中", "正在统计,请稍候", 0, 100, 320, null, false);
- Task.Run(() =>
+ using (var db = new MyDbContext())
{
- this.Invoke(new Action(() =>
+ var list = db.Students.GroupBy(o => o.Class, (k, g) => new GroupData
{
- using (var db = new MyDbContext())
+ Class = k,
+ Total = g.Count(),
+ HasImage = g.Sum(c => c.HasImage ? 1 : 0),
+ NotHasImage = g.Sum(c => c.HasImage ? 0 : 1),
+ HasUpload = g.Sum(c => c.HasUploaded ? 1 : 0),
+ NotHasUpload = g.Sum(c => c.HasUploaded ? 0 : 1),
+ HasChecked = g.Sum(c => c.HasChecked ? 1 : 0),
+ IsNotChecked = g.Sum(c => c.HasChecked ? 0 : 1),
+ Progress = g.Sum(c => c.HasUploaded ? 1 : 0) / (g.Count() * 1.0f)
+ })
+ .OrderBy(o => o.Class)
+ .ToList();
+ var total = new GroupData
+ {
+ Class = "合计",
+ Total = list.Sum(o => o.Total),
+ HasImage = list.Sum(o => o.HasImage),
+ NotHasImage = list.Sum(o => o.NotHasImage),
+ HasUpload = list.Sum(o => o.HasUpload),
+ NotHasUpload = list.Sum(o => o.NotHasUpload),
+ HasChecked = list.Sum(o => o.HasChecked),
+ IsNotChecked = list.Sum(o => o.HasChecked),
+ Progress = list.Sum(o => o.NotHasUpload) / (list.Sum(o => o.Total) * 1.0f)
+ };
+ list.Insert(0, total);
+ groupGrid.DataSource = list;
+ var headers = new string[] { "班级", "总人数", "已采集", "未采集", "已上传", "未上传", "已审核", "未审核", "完成进度" };
+ for (int i = 0; i < headers.Length; i++)
+ {
+ groupGrid.Columns[i].HeaderText = headers[i];
+ if (headers[i] == "完成进度")
{
- this._progress.SetProgress("开始统计数据", 0);
- var list = db.Students.GroupBy(o => o.Class, (k, g) => new GroupData
- {
- Class = k,
- Total = g.Count(),
- HasImage = g.Sum(c => c.HasImage ? 1 : 0),
- NotHasImage = g.Sum(c => c.HasImage ? 0 : 1),
- HasUpload = g.Sum(c => c.HasUploaded ? 1 : 0),
- NotHasUpload = g.Sum(c => c.HasUploaded ? 0 : 1),
- HasChecked = g.Sum(c => c.HasChecked ? 1 : 0),
- IsNotChecked = g.Sum(c => c.HasChecked ? 0 : 1),
- Progress = g.Sum(c => c.HasUploaded ? 1 : 0) / (g.Count() * 1.0f)
- })
- .OrderBy(o => o.Class)
- .ToList();
- this._progress.SetProgress("开始合计数据", 30);
- var total = new GroupData
- {
- Class = "合计",
- Total = list.Sum(o => o.Total),
- HasImage = list.Sum(o => o.HasImage),
- NotHasImage = list.Sum(o => o.NotHasImage),
- HasUpload = list.Sum(o => o.HasUpload),
- NotHasUpload = list.Sum(o => o.NotHasUpload),
- HasChecked = list.Sum(o => o.HasChecked),
- IsNotChecked = list.Sum(o => o.HasChecked),
- Progress = list.Sum(o => o.NotHasUpload) / (list.Sum(o => o.Total) * 1.0f)
- };
- list.Insert(0, total);
- groupGrid.DataSource = list;
- this._progress.SetProgress("开始设置表头", 60);
- var headers = new string[] { "班级", "总人数", "已采集", "未采集", "已上传", "未上传", "已审核", "未审核", "完成进度" };
- for (int i = 0; i < headers.Length; i++)
- {
- groupGrid.Columns[i].HeaderText = headers[i];
- if (headers[i] == "完成进度")
- {
- groupGrid.Columns[i].DefaultCellStyle.Format = "P0";
- }
- }
- this._progress.SetProgress("加载完毕", 100);
+ groupGrid.Columns[i].DefaultCellStyle.Format = "P0";
}
- }));
- this._progress.CloseProgress();
- this._progress = null;
- });
- this._progress.ShowDialog();
+ }
+ }
}
private void RefreshData()
{
- this._progress = new ProgressForm("加载中", "正在读取,请稍候", 0, 100, 320, null, false);
- Task.Run(() =>
+ var pageIndex = this.pageIndexSelector.SelectedValue == null ? 1 : Convert.ToInt32(this.pageIndexSelector.SelectedValue?.ToString());
+ var classValue = this.classSelector.SelectedValue == null ? "全部班级" : this.classSelector.SelectedValue.ToString();
+ using (var db = new MyDbContext())
{
- this.Invoke(new Action(() =>
+ //pagesize
+ if (this.pageSizeSelector.DataSource == null)
{
- this._progress.SetProgress("开始读取数据", 0);
- var pageIndex = this.pageIndexSelector.SelectedValue == null ? 1 : Convert.ToInt32(this.pageIndexSelector.SelectedValue?.ToString());
- var classValue = this.classSelector.SelectedValue == null ? "全部班级" : this.classSelector.SelectedValue.ToString();
- using (var db = new MyDbContext())
+ this.pageSizeSelector.SelectedIndexChanged -= this.pageSizeSelector_SelectedIndexChanged;
+ this.pageSizeSelector.DataSource = new List