【问题标题】:.NET bug. How to fix?.NET 错误。怎么修?
【发布时间】:2015-12-09 16:41:18
【问题描述】:

在我的复杂程序中,TextBox.TextGrid.Width 互连。 当我清除TextBox 时,.NET 崩溃了。

问题是我在TextBox.TextChanged 内部设置了Grid.Width,在Grid.SizeChanged 内部设置了TextBox.Text。因此,TextBox.Text 被设置在两个嵌套的事件处理程序中。

如果没有TimerBinding,任何人都可以帮助修复此错误吗?

运行时遇到致命错误。错误的地址 位于线程 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 中直接使用绑定呢?
  • 我将您的代码复制到一个小型测试应用程序中,我没有遇到任何问题。
  • 因为使用JavaScriptC ++是非常复杂的程序,而且它们不支持Binding

标签: c# wpf


【解决方案1】:

我通过使用 Dispatcher 解决了这个问题:

private void grid_SizeChanged(object sender, SizeChangedEventArgs e)
{
    //text.Text = grid.Width.ToString();
    Dispatcher.BeginInvoke(new Action(() => text.Text = grid.Width.ToString()));
}

感谢大家的“帮助”和负面评价。

【讨论】:

    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 2021-07-18
    • 2017-08-20
    • 2021-11-04
    • 2019-05-31
    • 2017-12-20
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多