【发布时间】:2017-08-30 22:43:53
【问题描述】:
我编写了一个在 Visual Studio 2017 中创建的 C# Windows 窗体。
在按钮单击事件处理程序中,我有一个永远不会完成的简单 if 语句:
if (listViewAddedKeys.CheckedItems.Count
listViewAddedKeys 是 ListView,“added”是 Hashtable。
这是完整的功能:
private void buttonSaveAdded_Click(object sender, System.EventArgs e)
{
try
{
saveFileDialog.ShowDialog();
if (saveFileDialog.FileName != String.Empty)
{
OnProgressEvent("Saving Data...");
DisableControls(this.Controls);
if (listViewAddedKeys.CheckedItems.Count < added.Count)
HashFromSelected(ref listViewAddedKeys, ref added, out currentSaving, false);
else
currentSaving = added;
BeginSaveData.BeginInvoke(saveFileDialog.FileName, ref currentSaving,
OnSaveDataCallback, BeginSaveData);
}
}
catch (Exception ex)
{
OnProgressEvent("Problem in buttonSaveAdded_Click(): " + ex.Message);
}
}
listViewAddedKeys 是 ListView,“added”是 Hashtable。
如果我断线: DisableControls(this.Controls);
并将“listViewAddedKeys.CheckedItems.Count”添加到调试器的“Watch 1”选项卡中,调试器无法检索该值(函数评估超时)。如果我将其更改为“listViewAddedKeys”,我可以深入了解它(例如,我可以看到项目数为 1,478,670),但是,如果我继续向下滚动它,Visual Studio 会崩溃.
我没有对线程做任何棘手的事情,我对任何东西的唯一锁定设置了一个尚未触发的断点。
我尝试按照 here 的建议进行操作,但 windbg 中的输出与他们希望我查找的项目都不匹配。
此时运行时 CPU 利用率为 0,资源管理器显示它没有对磁盘、内存或网络做任何事情。
这是在 Windows 10(截至 2017 年 8 月 30 日已完全修补)企业系统上。该代码是为 .NET Framework 4.6.1 编译的。代码分析干净利落。
在声明问题不在于我的代码之前,我还可以执行任何其他步骤吗?
【问题讨论】:
-
只在调试时遇到这个问题?如果你不调试就运行它可以正常工作吗?
-
当我在调试器之外执行时也会出现问题。
标签: c# wpf listview visual-studio-2017