- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
9 月 26 日编辑
有关完整背景,请参见下文。 tl; dr:数据网格控件导致奇怪的异常,我正在寻找帮助隔离原因并找到解决方案。
我进一步缩小了范围。我已经能够在较小的测试应用程序中重现该行为,并更可靠地触发不稳定的行为。
我绝对可以排除线程和(我认为)内存问题。新应用程序不使用任务或其他线程/异步功能,我可以通过添加属性来触发未处理的异常,这些属性将常量返回到 DataGrid 中显示的对象类。这向我表明问题要么是非托管资源耗尽,要么是我还没有想到的问题。
修订后的程序结构如下。我创建了一个名为 EntityCollectionGridView
的用户控件它有一个标签和一个数据网格。在控件的 Loaded 事件处理程序中,我分配了一个 List<TestClass>
到具有 1000 或 10000 行的数据网格,让网格生成列。此用户控件在页面的 OnNavigatedTo
中的 MainPage.xaml 中实例化了 2-4 次。事件(或 Loaded
,似乎无关紧要)。如果发生异常,则在显示 MainPage 后立即发生。
有趣的是,行为似乎并不随显示的行数而变化(它可以在 10000 行时可靠地工作,或者在每个网格中只有 1000 行时可靠地失败),而是随所有网格中的总列数而变化在给定的时间加载。要显示 20 个属性,4 个网格可以正常工作。有 35 个属性和 4 个网格,抛出异常。但是如果我消除两个网格,具有 35 个属性的同一个类将正常工作。
请注意,我添加到 TestClass
的所有属性从 20 列跳到 35 列的形式如下:
public string StringXYZ { get { return "asdfasdfasdfasdfasf"; } }
Not enough quota is available to process this command. (Exception from HRESULT: 0x80070718)
Root page: shows no datagrid
Child page: shows one datagrid and a few listviews
Grandchild page: shows two datagrids, one bound to the
same source as Child page, the other one empty
WinRTClient.exe!WinRTClient.App.InitializeComponent.AnonymousMethod__14(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e) Line 50 + 0x20 bytes C#
[Native to Managed Transition]
Windows.UI.Xaml.dll!DirectUI::CFTMEventSource<Windows::UI::Xaml::IUnhandledExceptionEventHandler,Windows::UI::Xaml::IApplication,Windows::UI::Xaml::IUnhandledExceptionEventArgs>::Raise(Windows::UI::Xaml::IApplication * pSource, Windows::UI::Xaml::IUnhandledExceptionEventArgs * pArgs) Line 327 C++
Windows.UI.Xaml.dll!DirectUI::Application::RaiseUnhandledExceptionEventHelper(long hrEncountered, unsigned short * pszErrorMessage, unsigned int * pfIsHandled) Line 920 + 0xa bytes C++
Windows.UI.Xaml.dll!DirectUI::ErrorHelper::CallAUHandler(unsigned int errorCode, unsigned int * pfIsHandled, wchar_t * * pbstrErrorMessage) Line 39 + 0x14 bytes C++
Windows.UI.Xaml.dll!DirectUI::ErrorHelper::ProcessUnhandledErrorForUserCode(long error) Line 82 + 0x10 bytes C++
Windows.UI.Xaml.dll!AgCoreCallbacks::CallAUHandler(unsigned int errorCode) Line 1104 + 0x8 bytes C++
Windows.UI.Xaml.dll!CCoreServices::ReportUnhandledError(long errorXR) Line 6582 C++
Windows.UI.Xaml.dll!CXcpDispatcher::Tick() Line 1126 + 0xb bytes C++
Windows.UI.Xaml.dll!CXcpDispatcher::OnReentrancyProtectedWindowMessage(HWND__ * hwnd, unsigned int msg, unsigned int wParam, long lParam) Line 653 C++
Windows.UI.Xaml.dll!CXcpDispatcher::WindowProc(HWND__ * hwnd, unsigned int msg, unsigned int wParam, long lParam) Line 401 + 0x24 bytes C++
user32.dll!_InternalCallWinProc@20() + 0x23 bytes
user32.dll!_UserCallWinProcCheckWow@36() + 0xbd bytes
user32.dll!_DispatchMessageWorker@8() + 0xf8 bytes
user32.dll!_DispatchMessageW@4() + 0x10 bytes
Windows.UI.dll!Windows::UI::Core::CDispatcher::ProcessMessage(int bDrainQueue, int * pbAnyMessages) Line 121 C++
Windows.UI.dll!Windows::UI::Core::CDispatcher::ProcessEvents(Windows::UI::Core::CoreProcessEventsOption options) Line 184 + 0x10 bytes C++
Windows.UI.Xaml.dll!CJupiterWindow::RunCoreWindowMessageLoop() Line 416 + 0xb bytes C++
Windows.UI.Xaml.dll!CJupiterControl::RunMessageLoop() Line 714 + 0x5 bytes C++
Windows.UI.Xaml.dll!DirectUI::DXamlCore::RunMessageLoop() Line 2539 + 0x5 bytes C++
Windows.UI.Xaml.dll!DirectUI::FrameworkView::Run() Line 91 C++
twinapi.dll!`Windows::ApplicationModel::Core::CoreApplicationViewAgileContainer::RuntimeClassInitialize'::`55'::<lambda_A2234BA2CCD64E2C>::operator()(void * pv) Line 560 C++
twinapi.dll!`Windows::ApplicationModel::Core::CoreApplicationViewAgileContainer::RuntimeClassInitialize'::`55'::<lambda_A2234BA2CCD64E2C>::<helper_func>(void * pv) Line 613 + 0xe bytes C++
SHCore.dll!_SHWaitForThreadWithWakeMask@12() + 0xceab bytes
kernel32.dll!@BaseThreadInitThunk@12() + 0xe bytes
ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes
ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
WindowProc
,
OnReentrancyProtectedWindowMessage
, 和
Tick
.
msg
是 0x402 (1026),这对我来说没有任何意义。
This page列出在以下上下文中使用的消息:
CBEM_SETIMAGELIST
DDM_CLOSE
DM_REPOSITION
HKM_GETHOTKEY
PBM_SETPOS
RB_DELETEBAND
SB_GETTEXTA
TB_CHECKBUTTON
TBM_GETRANGEMAX
WM_PSD_MINMARGINRECT
最佳答案
好的,还有一些 critical input from Tim Heuer [MSFT] ,我想出了发生了什么以及如何解决这个问题。
令人惊讶的是,我最初的三个猜测都不正确。这与内存、线程或系统资源无关。相反,它与 Windows 消息传递系统的限制有关。显然,它有点像堆栈溢出异常,因为当您一次对可视化树进行太多更改时,异步更新队列会变得很长,以至于它会跳闸并抛出异常。
在这种情况下,问题是有足够的 UIElements 进入我正在使用的数据网格,允许网格一次生成所有自己的列在某些情况下可能会超过限制。我同时使用了多个网格,并且所有网格都是为了响应页面导航事件而加载的,这使得确定起来更加棘手。
幸运的是,我遇到的限制不是可视化树或 XAML UI 子系统本身的限制,只是用于更新它的消息传递中的限制。这意味着如果我可以在调度程序时钟的多个滴答声上展开相同的操作,我就可以完成相同的最终结果。
我最终做的是指示我的数据网格不要自动生成自己的列。相反,我将网格嵌入到用户控件中,当加载数据时,它会解析出所需的列并将它们加载到列表中。然后,我调用了以下方法:
void LoadNextColumns(List<ColumnDisplaySetup> colDef, int startIdx, int numToLoad)
{
for (int idx = startIdx; idx < startIdx + numToLoad && idx < colDef.Count; idx++)
{
DataGridTextColumn newCol = new DataGridTextColumn();
newCol.Header = colDef[idx].Header;
newCol.Binding = new Binding() { Path = new PropertyPath(colDef[idx].Property) };
dgMainGrid.Columns.Add(newCol);
}
if (startIdx + numToLoad < colDef.Count)
{
Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
LoadNextColumns(colDef, startIdx + numToLoad, numToLoad);
});
}
}
ColumnDisplaySetup
是一种普通类型,用于存放解析出的配置或从文件加载的配置。)
numToLoad
的最大可能值来改善。并通过其他 UI 技巧。我可能会研究在生成列时隐藏网格,并仅在一切准备就绪时才显示结果。最终决定将归结为哪种感觉更“快速和流畅”。
关于c# - DataGrid 的 WinRT 端口中的神秘 "Not enough quota is available to process this command",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12584619/
我正在尝试安装一种用于 TCPDF 的字体。为此,我需要运行附带的命令行实用程序 ttf2ufm。 (包含在 TCPDF 中的 fonts/utils/ttf2ufm 中)但是当我运行它时,出现错误
我是 answering a question并假设 if [ $(command) ]; then ... 总是等同于 if command; then ... 但是,我得到了a couple of
我的package.json定义: ... "scripts": { "start": "node scripts/start.js", "build"
我知道默认的“CTRL+B”Windows 命令可用于显示所有嵌套文件。 是否有显示所有嵌套文件夹的快捷方式? 最佳答案 我怀疑 Total Commander 中是否存在此功能。内置tree实用性对
任何人都可以告诉我,是否有任何可以检测当前运营商名称的AT命令? 我用过AT+COPS? 它返回给我运算符(operator)的数字代码:0,2,40410 然后我使用命令 AT+WOPN = 0,4
我需要将网站托管到 google firebase 托管。 我几乎到处都看过,但钢有问题。 我已安装 npm install --global firebase 还有 npm install -g f
我想要这样的东西 如果(command_not_exists)退出 谁能告诉我如何在 cshell 脚本中实现此功能? 最佳答案 我的问题是使用 where 命令解决的(我尝试使用 which 命令)
通过使用 + 的参数调用它,我可以使 vim 将光标定位在文件的最后一行。 : vi + myfile # "+" = go to last line of file 我怎样才能做到
我想要这样的东西 如果(command_not_exists)退出 谁能告诉我如何在 cshell 脚本中实现此功能? 最佳答案 我的问题是使用 where 命令解决的(我尝试使用 which 命令)
在 cobra 中,我创建了一个命令命令: myapp zip -directory "xzy" -output="zipname" myapp upload -filename="abc" 我想制作
我应用了所有可能的答案,但仍然是同样的问题。 也试过 $this->db->reconnect(); 我的查询没有问题 我的代码: public function GetdistributorsDet
有什么区别: eval echo lala 和: command="echo lala" $command 它们似乎都具有相同的效果,但我可能遗漏了一些东西。此外,如果它们确实具有相同的效果,那么ev
要将命令的输出存储为 sh/ksh/bash 中的变量,您可以执行任一操作 var=$(command) 或 var=`command` 这两种方法有什么区别? 最佳答案 反引号/标记已被弃用,取而代
我想让我的用户根据他的选择以 sudo 和普通用户身份运行。他可以使用 sudo 或普通用户,但如果不使用 sudo,我必须禁用某些功能来消除错误。那么我怎么知道该用户是否给了我 sudo 执行权限?
这个问题已经有答案了: Command substitution: backticks or dollar sign / paren enclosed? [duplicate] (3 个回答) 已关闭
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Command substitution: backticks or dollar sign / paren enc
要将命令的输出存储为 sh/ksh/bash 中的变量,您可以执行任一操作 var=$(command) 或 var=`command` 这两种方法有什么区别? 最佳答案 反引号/标记已被弃用,取而代
Linux 101 Hacks 这本书的第 38 页建议: cat url-list.txt | xargs wget –c 我通常这样做: for i in `cat url-list.txt`
问题是当我为我的项目编写 Makefile 时,当我需要检测当前分支名称时,在 make 规则中我这样做了: check_branch: if [ "$(git rev-parse --abb
默认情况下,控制台命令文件夹位于:MyProject\MyBundle\Command并且一切都按预期工作,但是如果我将文件夹移动到另一个目录中,例如:MyProject\MyBundle\MyFol
我是一名优秀的程序员,十分优秀!