【发布时间】:2015-12-09 16:41:18
【问题描述】:
在我的复杂程序中,TextBox.Text 与 Grid.Width 互连。
当我清除TextBox 时,.NET 崩溃了。
问题是我在TextBox.TextChanged 内部设置了Grid.Width,在Grid.SizeChanged 内部设置了TextBox.Text。因此,TextBox.Text 被设置在两个嵌套的事件处理程序中。
如果没有Timer 或Binding,任何人都可以帮助修复此错误吗?
运行时遇到致命错误。错误的地址 位于线程 0x2844 上的 0x6c05e4ad。错误代码为 0x80131623。 此错误可能是 CLR 中的错误或不安全或不可验证的错误 部分用户代码。此错误的常见来源包括用户 COM-interop 或 PInvoke 的封送处理错误,这可能会损坏 堆栈。
我创建了一个测试 WPF 应用来单独检查这个错误。
XAML:
<Grid Height="350">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="350" />
<ColumnDefinition Width="350" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0"
x:Name="grid"
Width="300"
Height="300"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="Red"
SizeChanged="grid_SizeChanged" />
<TextBox Grid.Column="1"
x:Name="text"
Text="300"
TextChanged="text_TextChanged" />
</Grid>
后面的代码:
private void grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
text.Text = grid.Width.ToString();
}
private void text_TextChanged(object sender, TextChangedEventArgs e)
{
if (text.Text == "")
grid.Width = double.NaN;
}
【问题讨论】:
-
清除的时候为什么要设置为
NaN?我确定这是 导致运行时中的“错误”,尝试将其更改为 是一个数字,例如 0。 -
MessageBox.Show(new Grid().Width.ToString());显示NaN,所以它的意思是Auto -
为什么不在你的 XML 中直接使用绑定呢?
-
我将您的代码复制到一个小型测试应用程序中,我没有遇到任何问题。
-
因为使用
JavaScript和C ++是非常复杂的程序,而且它们不支持Binding