winform 的一些记录
1、winform 播放语音
System.Media.SoundPlayer player = new System.Media.SoundPlayer(); player.SoundLocation = Application.StartupPath + "//请到此处报道.wav"; player.LoadAsync(); //异步读取 //player.PlaySync();//异步播放 //player.Load(); player.PlayLooping();//循环播放
2、DataGridViewComboBoxCell 绑定值
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
var cell = this.dataGridView1.Rows[e.RowIndex].Cells[1];
DataGridViewComboBoxCell DgvCell = this.dataGridView1.Rows[e.RowIndex].Cells[1] as DataGridViewComboBoxCell;
DgvCell.DataSource = comboboxOption;
DgvCell.ValueMember = "pointType";
DgvCell.DisplayMember = "Description";
}
3、DataGridViewComboBoxCell 下拉框事件
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (dgv.CurrentCell.GetType().Name == "DataGridViewComboBoxCell" && dgv.CurrentCell.RowIndex != -1) {
//加上下拉事件
(e.Control as ComboBox).SelectedIndexChanged += PointType_SelectedIndexChanged;
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PointType_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBox combox = sender as ComboBox;
combox.Leave += Combox_Leave;
try {
if (combox.SelectedItem != null && dataGridView.SelectedRows.Count > 0)
{
var row = dataGridView1.CurrentRow;
Flyline fl = Client.getSide().Flylines.FirstOrDefault(x => x.guid == dataGridView.SelectedRows[0].Cells["ID"].Value.ToString());
if (fl != null)
{
LinePoint lp = fl.LinePoints.FirstOrDefault(x => x.ID == row.Cells["ID1"].Value.ToString());
if (lp != null)
{
var pointType = combox.SelectedValue;
if (pointType != null && !string.IsNullOrWhiteSpace(pointType.ToString()))
{
lp.pointType = pointType.ToString();
}
}
}
}
Thread.Sleep(100);
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 离开combox的时候,把事件删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Combox_Leave(object sender, EventArgs e)
{
ComboBox combox = sender as ComboBox;
//做完处理,撤销动态事件
combox.SelectedIndexChanged -= PointType_SelectedIndexChanged;
}
4、再次加载的时候绑定数据
var data = Client.FirstOrDefault(x => x.guid == dataGridView.SelectedRows[0].Cells["ID"].Value.ToString()).LinePoints;
dataGridView1.DataSource = data;
for (var i = 0; i < data.Count; i++)
{
((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).DataSource = comboboxOption;
((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).ValueMember = "pointType";
((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).DisplayMember = "Description";
((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).Value = data[i].pointType;
}
5、获取当前网络类型
private void InitNetWorkData() {
lbNetWorkType.Text = "";
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// 检查网络接口是否处于在线状态并且不是回环或隧道接口
if (ni.OperationalStatus == OperationalStatus.Up &&ni.NetworkInterfaceType != NetworkInterfaceType.Loopback &&ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel)
{
Console.WriteLine("Name: {0}", ni.Name);
Console.WriteLine("Description: {0}", ni.Description);
Console.WriteLine("Type: {0}", ni.NetworkInterfaceType);
// 这里你可以添加更多的逻辑来判断接口类型
// 例如,通过解析Description或其他属性来推断是否是2G/3G/4G/5G/Wi-Fi
// 注意:这种方法可能不是100%准确的,因为描述信息可能因设备和操作系统而异
if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet) {
//网线
lbNetWorkType.Text = "NETWORK_ETHERNET";
}
else if (ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
{
//WIFI
lbNetWorkType.Text = "NETWORK_WIFI";
label2.Visible = true;
lbWifiStrength.Visible = true;
}
else if (ni.NetworkInterfaceType == NetworkInterfaceType.Unknown)
{
//未知
lbNetWorkType.Text = "NETWORK_UNKNOWN";
}
// 示例:如果描述中包含"2G",我们假设它是2G网络(这只是一个简单的示例)
else if (ni.Description.Contains("2G"))
{
lbNetWorkType.Text = "NETWORK_2G";
}
else if (ni.Description.Contains("3G"))
{
lbNetWorkType.Text = "NETWORK_3G";
}
else if (ni.Description.Contains("4G"))
{
lbNetWorkType.Text = "NETWORK_4G";
}
else if (ni.Description.Contains("5G"))
{
lbNetWorkType.Text = "NETWORK_5G";
}
else
{
lbNetWorkType.Text = "NETWORK_NO";
}
}
}
}
6、ping一个网址
private string FormatPingStatus(IPStatus status)
{
switch (status)
{
case IPStatus.DestinationHostUnreachable:
return "目标主机不可达";
break;
case IPStatus.DestinationNetworkUnreachable:
return "目标网络不可达";
break;
case IPStatus.DestinationProhibited:
return "目标主机禁止访问";
break;
case IPStatus.PacketTooBig:
return "数据包太大,网络无法传输";
break;
case IPStatus.ParameterProblem:
return "参数错误";
break;
case IPStatus.SourceQuench:
return "源抑制";
break;
case IPStatus.TimedOut:
return "请求超时";
break;
case IPStatus.Unknown:
return "未知错误";
break;
default:
return "";
break;
}
}
private async Task PingMethod(CancellationToken cancellationToken, object host)
{
cancellationToken.ThrowIfCancellationRequested();
var result = false;
调用同步 send 方法发送数据,将返回结果保存至PingReply实例
var sb = new StringBuilder();
var hostStr = ((string)host).Replace("https://", "").Replace("http://", "").TrimEnd('/');
sb.AppendLine("ping:" + host);
try
{
Ping pingSender = new Ping();
PingReply reply = pingSender.Send(hostNameOrAddress: hostStr, timeout: 120);
if (reply.Status == IPStatus.Success)
{
sb.AppendLine("成功:耗时--" + reply.RoundtripTime + "毫秒");
result = true;
}
else
{
sb.AppendLine("ping:" + host + "\n失败: " + FormatPingStatus(reply.Status));
result = false;
}
}
catch (Exception ex)
{
sb.AppendLine("ping:" + host + "\n失败: " + ex.Message);
result = false;
}
runCount++;
if (result)
{
successCount++;
}
if (host == Urls[0])
{
if (result)
{
UpdateServiceStatus("正常");
}
else
{
UpdateServiceStatus("异常");
}
}
UpdateLog(sb.ToString());
await Task.Delay(100); // 实际应用中这里会有长时间运行的代码
}
private void PingMethod(object host)
{
调用同步 send 方法发送数据,将返回结果保存至PingReply实例
var sb = new StringBuilder();
var hostStr = ((string)host).Replace("https://", "").Replace("http://", "").TrimEnd('/');
sb.AppendLine("ping:" + host);
try
{
Ping pingSender = new Ping();
PingReply reply = pingSender.Send(hostNameOrAddress: hostStr, timeout: 120);
if (reply.Status == IPStatus.Success)
{
sb.AppendLine("成功:耗时--" + reply.RoundtripTime + "毫秒");
}
else
{
sb.AppendLine("ping:" + host + "\n失败: " + FormatPingStatus(reply.Status));
}
}
catch (Exception ex)
{
sb.AppendLine("ping:" + host + "\n失败: " + ex.Message);
}
UpdateLog(sb.ToString());
}
public void UpdateLog(string message)
{
if (txtLogs.InvokeRequired)
{
txtLogs.Invoke(new Action<string>(UpdateLog), message);
}
else
{
txtLogs.AppendText(message + Environment.NewLine);
}
}
public void UpdateServiceStatus(string message)
{
if (lbService.InvokeRequired)
{
lbService.Invoke(new Action<string>(UpdateServiceStatus), message);
}
else
{
lbService.Text = message;
}
}
7、WMI的一些例子
// 创建一个WMI查询,获取磁盘驱动器信息
query = "SELECT * FROM Win32_NetworkAdapter";
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
// 执行查询并获取结果集合
using (ManagementObjectCollection collection = searcher.Get())
{
// 遍历结果集合
foreach (ManagementObject obj in collection)
{
// 获取并显示磁盘驱动器的相关信息
Console.WriteLine("DeviceID: {0}", obj["DeviceID"]);
Console.WriteLine("Manufacturer: {0}", obj["Manufacturer"]);
Console.WriteLine("Model: {0}", obj["Model"]);
Console.WriteLine("Size: {0} GB", (Convert.ToInt64(obj["Size"]) / (1024 * 1024 * 1024))); // 将字节转换为GB
Console.WriteLine();
}
}
}
// 仅查询处于连接状态的网络适配器
// 定义WMI查询字符串
string query = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2";
// 创建ManagementObjectSearcher对象来执行查询
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{
// 执行查询并获取结果集合
using (ManagementObjectCollection collection = searcher.Get())
{
// 遍历结果集合中的每个ManagementObject
foreach (ManagementObject obj in collection)
{
// 获取并显示网络适配器的属性
Console.WriteLine("Description: {0}", obj["Description"]);
Console.WriteLine("Manufacturer: {0}", obj["Manufacturer"]);
Console.WriteLine("Name: {0}", obj["Name"]);
Console.WriteLine("NetConnectionStatus: {0}", obj["NetConnectionStatus"]); // 注意:这个属性可能返回的数字对应不同的状态,你可能需要转换或解释这些数字
Console.WriteLine("Speed: {0} bps", obj["Speed"]); // 速度,以比特每秒(bps)为单位
Console.WriteLine(); // 输出一个空行以分隔不同的网络适配器信息
// 如果你想查询更多属性,可以继续添加,例如:
// Console.WriteLine("AdapterType: {0}", obj["AdapterType"]);
// Console.WriteLine("MACAddress: {0}", obj["MACAddress"]);
// ... 等等
}
}
}
//获取ManagementObject的全部属性
// 定义WMI查询字符串
string query = "SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2";
// 创建ManagementObjectSearcher对象
ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query);
// 遍历所有实例
foreach (ManagementObject process in searcher1.Get())
{
Console.WriteLine(""); Console.WriteLine(""); Console.WriteLine("");
Console.WriteLine("----------------Start-------------------");
Console.WriteLine("Name: {0}", process["Name"]);
Console.WriteLine("WMI Object: " + process.Path.ToString());
// 输出所有属性
foreach (PropertyData property in process.Properties)
{
Console.WriteLine("{0} : {1}", property.Name, property.Value);
}
Console.WriteLine("----------------End-------------------");
}
8、在App.Config中增加值,以及取值
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
<add key="Setting1" value="May 5,2018"/>
<add key="Setting2" value="May 5,2017"/>
</appSettings>
<connectionStrings>
<add name="Default" connectionString="Server=127.0.0.1; Database=CityManage; Trusted_Connection=False; Uid=root; pwd=zxx123456;" providerName="System.Data.SqlClient" />
<add name="Abp.Redis.Cache" connectionString="localhost" />
</connectionStrings>
</configuration>
var connectionString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString;
var appSettings = ConfigurationManager.AppSettings;
if (appSettings.Count == 0)
{
Console.WriteLine("AppSettings is empty.");
}
else
{
foreach (var key in appSettings.AllKeys)
{
Console.WriteLine("Key: {0} Value: {1}", key, appSettings[key]);
}
}
ConfigurationManager.AppSettings["ServerAddress"].ToString() //需要引用System.Configuration
ConfigurationSettings.AppSettings["ServerAddress"].ToString();
9、获取路径
取得WinForm应用程序的根目录方法
1:Environment.CurrentDirectory.ToString();//获取或设置当前工作目录的完全限定路径
2:Application.StartupPath.ToString();//获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称
3:Directory.GetCurrentDirectory();//获取应用程序的当前工作目录
4:AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集
5:AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称
10、打开其他exe,如果有则关掉进程再重新打开,传参
var exePath= Application.StartupPath + "/NetworkDetection/BizcentNetworkDetection.exe";
// 获取与指定名称匹配的进程
Process[] processes = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(exePath));
// 如果找到了打开的进程,先关闭它
if (processes.Length > 0)
{
foreach (Process p in processes)
{
p.Kill();
p.WaitForExit(); // 等待进程退出
}
}
// 打开外部exe
Process.Start(exePath);
string s = ""; s = CurrentLogin.dept.name + " " + CurrentLogin._platform_name + " " + CurrentLogin.WebAPI; // 打开外部exe Process.Start(exePath,s);
11、获取电脑操作系统
private const string Windows2000 = "5.0"; private const string WindowsXP = "5.1"; private const string Windows2003 = "5.2"; private const string Windows2008 = "6.0"; private const string Windows7 = "6.1"; private const string Windows8OrWindows81 = "6.2"; private const string Windows10 = "10.0";
/// <summary>
/// 获取电脑操作系统--无法区分WIN10,WIN8
/// </summary>
/// <returns></returns>
public static string GetPCSystemVersion()
{
try
{
switch (System.Environment.OSVersion.Version.Major + "." + System.Environment.OSVersion.Version.Minor)
{
case Windows2000:
return "Win2000";
break;
case WindowsXP:
return "WinXP";
break;
case Windows2003:
return "Win2003";
break;
case Windows2008:
return "Win2008";
break;
case Windows7:
return "Win7";
break;
case Windows8OrWindows81:
return "Win8";
break;
case Windows10:
return "Win10";
default:
return string.Empty;
break;
}
}
catch (Exception ex)
{
LogCommon.Logger.Logging(ex);
return string.Empty;
}
}
12、获取MAC地址
//mac地址
private async Task InitMacAddress()
{
StringBuilder sb = new StringBuilder();
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
if (nic.OperationalStatus == OperationalStatus.Up)
{
if (!string.IsNullOrEmpty(nic.GetPhysicalAddress().ToString())) {
sb.Append(nic.GetPhysicalAddress().ToString());
sb.Append(", ");
}
}
}
string macAddress = sb.ToString().Trim().TrimEnd(',');
lbMAC.Text = "MAC地址:" + macAddress;
await Task.Delay(1);
}
13、获取IP
//ip地址
private async Task InitLocalIPAddress()
{
var ipStr = "";
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
ipStr = ip.ToString();
break;
}
}
lbIP.Text = "IP地址:" + ipStr;
await Task.Delay(1);
}
14、获取CPU占用比
PerformanceCounter cpuCounter;
cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
//获取CPU利用率
private async Task InitializeCpu()
{
float cpuUsage = cpuCounter.NextValue(); // 获取下一个值,即当前值
String num = cpuUsage.ToString("0.0");
// 更新UI线程中的控件
UpdateCPU(string.Format("CPU占比:{0}%", num));
await Task.Delay(1);
}
15、获取内存占用比
PerformanceCounter _memoryCounter;
_memoryCounter = new PerformanceCounter("Memory", "Available MBytes");
//内存使用量
private async Task InitializeNEICUN()
{
var value = ("内存占比:" + (100 - _memoryCounter.NextValue() / 160).ToString("0.0") + " %");
UpdateNeiCun(value);
await Task.Delay(1);
}

浙公网安备 33010602011771号