A:增加Top网速固定展示

This commit is contained in:
jimmy committed 2025-08-08 09:51:20 +08:00
1 parent e3f8ad7749
commit 5b7abd1ef3
2 files changed
+68 -53

No files matched your search

@@ -132,8 +132,9 @@
FontSize="9" FontWeight="Normal" FontSize="9" FontWeight="Normal"
Foreground="#666666" Foreground="#666666"
VerticalAlignment="Center" VerticalAlignment="Center"
MinWidth="35" Width="40"
TextAlignment="Right" /> TextAlignment="Right"
FontFamily="Consolas" />
</Grid> </Grid>
<!-- Download Speed --> <!-- Download Speed -->
@@ -150,8 +151,9 @@
FontSize="9" FontWeight="Normal" FontSize="9" FontWeight="Normal"
Foreground="#666666" Foreground="#666666"
VerticalAlignment="Center" VerticalAlignment="Center"
MinWidth="35" Width="40"
TextAlignment="Right" /> TextAlignment="Right"
FontFamily="Consolas" />
</Grid> </Grid>
</Grid> </Grid>
</DataTemplate> </DataTemplate>
@@ -493,38 +493,30 @@ public class NetworkMonitorViewModel : INotifyPropertyChanged
// 更新NetworkTopListManager的统计数据 // 更新NetworkTopListManager的统计数据
NetworkTopListManager.Instance.UpdateAllProcessStats(); NetworkTopListManager.Instance.UpdateAllProcessStats();
// 获取Top榜数据 // 获取Top榜数据(现在总是返回固定数量的项目)
var topList = NetworkTopListManager.Instance.GetTopList(settings.NetworkTopListCount); var topList = NetworkTopListManager.Instance.GetTopList(settings.NetworkTopListCount);
if (topList.HasData) // 总是显示Top榜,因为现在保证有固定数量的项目
var newViewModels = topList.TopProcesses.Select(stats =>
{ {
// 更新现有项目或添加新项目 var existing = TopProcesses.FirstOrDefault(vm => vm.ProcessId == stats.ProcessId);
var newViewModels = topList.TopProcesses.Select(stats => if (existing != null)
{ {
var existing = TopProcesses.FirstOrDefault(vm => vm.ProcessId == stats.ProcessId); existing.UpdateStats(stats);
if (existing != null) return existing;
{
existing.UpdateStats(stats);
return existing;
}
return new ProcessNetworkStatsViewModel(stats);
}).ToList();
// 更新集合
TopProcesses.Clear();
foreach (var vm in newViewModels)
{
TopProcesses.Add(vm);
} }
TopListVisibility = System.Windows.Visibility.Visible; return new ProcessNetworkStatsViewModel(stats);
} }).ToList();
else
// 更新集合
TopProcesses.Clear();
foreach (var vm in newViewModels)
{ {
TopProcesses.Clear(); TopProcesses.Add(vm);
TopListVisibility = System.Windows.Visibility.Collapsed;
} }
TopListVisibility = System.Windows.Visibility.Visible;
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -537,36 +529,57 @@ public class NetworkMonitorViewModel : INotifyPropertyChanged
/// </summary> /// </summary>
private void UpdateDesignTimeTopList() private void UpdateDesignTimeTopList()
{ {
if (TopProcesses.Count == 0) var settings = NetViewSettings.Instance;
var targetCount = settings.NetworkTopListCount;
// 确保始终显示固定数量的项目
if (TopProcesses.Count != targetCount)
{ {
// 添加一些假数据用于设计时预览 // 创建固定数量的假数据
var fakeStats = new[] var fakeStats = new List<ProcessNetworkStats>();
// 添加有网络活动的进程
fakeStats.Add(new ProcessNetworkStats
{ {
new ProcessNetworkStats ProcessId = 1234,
ProcessName = "chrome",
CurrentUploadSpeed = 1024 * 500, // 500 KB/s
CurrentDownloadSpeed = 1024 * 1024 * 15.5, // 15.5 MB/s
});
fakeStats.Add(new ProcessNetworkStats
{
ProcessId = 5678,
ProcessName = "firefox",
CurrentUploadSpeed = 1024 * 200, // 200 KB/s
CurrentDownloadSpeed = 1024 * 1024 * 8.2, // 8.2 MB/s
});
fakeStats.Add(new ProcessNetworkStats
{
ProcessId = 9012,
ProcessName = "steam",
CurrentUploadSpeed = 1024 * 50, // 50 KB/s
CurrentDownloadSpeed = 1024 * 1024 * 5.1, // 5.1 MB/s
});
// 如果需要更多项目,添加无网络活动的进程
while (fakeStats.Count < targetCount)
{
fakeStats.Add(new ProcessNetworkStats
{ {
ProcessId = 1234, ProcessId = 1000 + fakeStats.Count,
ProcessName = "chrome", ProcessName = $"app{fakeStats.Count + 1}",
CurrentUploadSpeed = 1024 * 500, // 500 KB/s CurrentUploadSpeed = 0,
CurrentDownloadSpeed = 1024 * 1024 * 15.5, // 15.5 MB/s CurrentDownloadSpeed = 0,
}, });
new ProcessNetworkStats }
{
ProcessId = 5678, // 取前N个项目
ProcessName = "firefox", var selectedStats = fakeStats.Take(targetCount).ToList();
CurrentUploadSpeed = 1024 * 200, // 200 KB/s
CurrentDownloadSpeed = 1024 * 1024 * 8.2, // 8.2 MB/s
},
new ProcessNetworkStats
{
ProcessId = 9012,
ProcessName = "steam",
CurrentUploadSpeed = 1024 * 50, // 50 KB/s
CurrentDownloadSpeed = 1024 * 1024 * 5.1, // 5.1 MB/s
}
};
TopProcesses.Clear(); TopProcesses.Clear();
foreach (var stats in fakeStats) foreach (var stats in selectedStats)
{ {
TopProcesses.Add(new ProcessNetworkStatsViewModel(stats)); TopProcesses.Add(new ProcessNetworkStatsViewModel(stats));
} }