forked from sergiisyrovatchenko/SQLIndexManager
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNetworkBox.cs
More file actions
92 lines (71 loc) · 2.45 KB
/
Copy pathNetworkBox.cs
File metadata and controls
92 lines (71 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SQLIndexManager {
public partial class NetworkBox : XtraForm {
readonly CancellationTokenSource _cancel = new CancellationTokenSource(500);
public NetworkBox() {
InitializeComponent();
if (Settings.NetworkHosts.Count == 0) {
NetworkScanAsync();
}
else {
boxNetwork.Items.AddRange(Settings.NetworkHosts.ToArray());
UpdateControlUsage(true);
}
}
private async void NetworkScanAsync() {
boxNetwork.Items.Clear();
UpdateControlUsage(false);
List<string> localNetworks = await Task.Run(() => StartNetworkScan(_cancel.Token));
boxNetwork.Items.AddRange(localNetworks.ToArray());
Settings.NetworkHosts = localNetworks;
UpdateControlUsage(true);
}
private List<string> StartNetworkScan(CancellationToken ct) {
List<string> localNetworks = new List<string>();
if (ct.IsCancellationRequested)
return localNetworks;
using (OleDbDataReader reader = OleDbEnumerator.GetEnumerator(Type.GetTypeFromProgID("SQLOLEDB Enumerator"))) {
while (reader.Read()) {
if (ct.IsCancellationRequested)
return localNetworks;
object[] row = new object[reader.FieldCount];
reader.GetValues(row);
string networkHost = (string)row[0];
if (!localNetworks.Contains(networkHost))
localNetworks.Add(networkHost);
}
}
return localNetworks;
}
private void UpdateControlUsage(bool enabled) {
progressBar.Visible = !enabled;
buttonOK.Enabled = enabled && boxNetwork.Items.Count > 0;
boxNetwork.SelectedIndex = 0;
}
public string GetNetworkHost() {
return boxNetwork.SelectedValue.ToString();
}
private void NetworkBox_FormClosed(object sender, FormClosedEventArgs e) {
_cancel.Cancel();
}
#region Override Methods
protected override bool ProcessDialogKey(Keys keyData) {
if (keyData == Keys.Escape) {
DialogResult = DialogResult.Cancel;
return true;
}
if (keyData == Keys.Enter && buttonOK.Enabled && boxNetwork.SelectedValue != null) {
DialogResult = DialogResult.OK;
return true;
}
return base.ProcessDialogKey(keyData);
}
#endregion
}
}