The UI will be blocked when using InkRecognizer

Xie Steven 811 Reputation points
2022-12-07T01:41:08.193+00:00

Hi,

My app uses the Windows.UI.Input.Inking APIs to recognize the Japanese words.

Recently, the app gets stuck randomly when calling the IInkRecognizerContainer.GetRecognizers Method or IInkRecognizerContainer.RecognizeAsync Method.

It's hard to reproduce this issue every time. I just want to know which scenarios will make the two APIs wait forever.

Updated on 2022/12/13:

<Page.Resources>  
        <Style x:Key="CustomRichEditBoxStyle" TargetType="RichEditBox">  
            <Setter Property="VerticalContentAlignment" Value="Center"/>  
            <Setter Property="BorderBrush" Value="#707070"/>  
            <Setter Property="FontSize" Value="35"/>  
            <Setter Property="FontWeight" Value="Bold"/>  
            <Setter Property="Background" Value="Transparent" />  
            <Setter Property="VerticalAlignment" Value="Center"/>  
            <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto"/>  
            <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/>  
            <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden"/>  
            <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden"/>  
            <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/>  
            <Setter Property="TextWrapping" Value="NoWrap"/>  
            <Setter Property="Template">  
                <Setter.Value>  
                    <ControlTemplate TargetType="RichEditBox">  
                        <Grid>  
                            <Grid.RowDefinitions>  
                                <RowDefinition Height="Auto"/>  
                                <RowDefinition Height="*"/>  
                            </Grid.RowDefinitions>  
                            <VisualStateManager.VisualStateGroups>  
                                <VisualStateGroup x:Name="CommonStates">  
                                    <VisualState x:Name="Disabled">  
                                        <Storyboard>  
                                        </Storyboard>  
                                    </VisualState>  
                                    <VisualState x:Name="Normal"/>  
                                    <VisualState x:Name="PointerOver">  
                                        <Storyboard>  
                                        </Storyboard>  
                                    </VisualState>  
                                    <VisualState x:Name="Focused">  
                                        <Storyboard>  
                                        </Storyboard>  
                                    </VisualState>  
                                </VisualStateGroup>  
                            </VisualStateManager.VisualStateGroups>  
                            <Border x:Name="BorderElement" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Grid.ColumnSpan="2" Grid.RowSpan="1" Grid.Row="1"/>  
                            <ContentPresenter x:Name="HeaderContentPresenter" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.ColumnSpan="2" FontWeight="Normal" Foreground="{ThemeResource TextControlHeaderForeground}" Margin="0,0,0,8" Grid.Row="0" Visibility="Collapsed" x:DeferLoadStrategy="Lazy"/>  
                            <ScrollViewer x:Name="ContentElement" AutomationProperties.AccessibilityView="Raw" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsTabStop="False" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Grid.Row="1" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" ZoomMode="Disabled"/>  
                            <TextBlock x:Name="PlaceholderTextContentPresenter" Grid.ColumnSpan="2" Foreground="{ThemeResource TextControlPlaceholderForeground}" IsHitTestVisible="False" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Grid.Row="1" Text="{TemplateBinding PlaceholderText}" TextAlignment="{TemplateBinding TextAlignment}"/>  
                        </Grid>  
                    </ControlTemplate>  
                </Setter.Value>  
            </Setter>  
        </Style>  
  
    </Page.Resources>  
    <Grid>  
        <Grid.RowDefinitions>  
            <RowDefinition Height="*"></RowDefinition>  
            <RowDefinition Height="*"></RowDefinition>  
            <RowDefinition Height="8*"></RowDefinition>  
        </Grid.RowDefinitions>  
        <StackPanel Grid.Row="0" Margin="50,10" Height="90" Orientation="Horizontal" HorizontalAlignment="Right">  
              
            <Button Content="スペース" x:Name="btnSpace"  Click="{x:Bind MyViewModel.BtnSpace_Click}" Width="240" Margin="10,0" />  
            <Button Content="一字消去" x:Name="btnDelete" Click="{x:Bind MyViewModel.BtnDelete_Click}" Width="240" Margin="10,0" />  
            <Button Content="全消去" x:Name="btnDeleteAll" Click="{x:Bind MyViewModel.BtnDeleteAll_Click}" Width="240" Margin="10,0" />  
        </StackPanel>  
        <Grid Grid.Row="1">  
            <Grid.ColumnDefinitions>  
                <ColumnDefinition Width="8*"></ColumnDefinition>  
                <ColumnDefinition></ColumnDefinition>  
                <ColumnDefinition></ColumnDefinition>  
            </Grid.ColumnDefinitions>  
            <RichEditBox Grid.Column="0" Style="{StaticResource CustomRichEditBoxStyle}"   
                                 x:Name="txtName"  
                                 HorizontalTextAlignment="Left"   
                                 Width="850" Height="70" Margin="10,0,10,0"   
                                 Padding="20,0,0,10"  
                                 IsHitTestVisible="False"  
                                 PreventKeyboardDisplayOnProgrammaticFocus="True"  
                                 ContextMenuOpening="{x:Bind MyViewModel.Tbx_ContextMenuOpening}"/>  
            <Button Content="←" Grid.Column="1" x:Name="btnLeft"  Click="{x:Bind MyViewModel.Button_Click_Left}" Margin="10,0"/>  
            <Button Content="→" Grid.Column="2" x:Name="btnRight" Click="{x:Bind MyViewModel.Button_Click_Right}" Margin="0"/>  
        </Grid>  
          
  
        <Grid Grid.Row="2" Grid.RowSpan="5"  Grid.Column="0" Height="380" VerticalAlignment="Top">  
            <Border BorderBrush="#707070" BorderThickness="2"  CornerRadius="15" Margin="0,10,10,10" Background="#FFFFFF">  
                <Grid>  
                    <Line X1="10" X2="1480" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3" Margin="18 30 0 0"></Line>  
                    <InkCanvas Name="inkCanvas" x:FieldModifier="public"/>  
                    <Line X1="10" X2="1480" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3" Margin="18 105 0 0"></Line>  
                    <Line X1="10" X2="1480" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3" Margin="18 180 0 0"></Line>  
                    <Line X1="10" X2="1480" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3" Margin="18 255 0 0"></Line>  
                    <Line X1="10" X2="1480" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3" Margin="18 330 0 25"></Line>  
                    <Line X1="30" X2="30" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="106" X2="106" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="182" X2="182" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="258" X2="258" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="334" X2="334" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="410" X2="410" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="486" X2="486" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="562" X2="562" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="638" X2="638" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="714" X2="714" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="790" X2="790" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="866" X2="866" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="942" X2="942" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="1010" X2="1010" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="1086" X2="1086" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="1170" X2="1170" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="1250" X2="1250" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="1330" X2="1330" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="1420" X2="1420" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                    <Line X1="1500" X2="1500" Y1="30" Y2="325" Stroke="#C5C5C5" StrokeDashArray="3" StrokeThickness="3"/>  
                </Grid>  
            </Border>  
        </Grid>  
    </Grid>  

public sealed partial class HandWriter : Page  
    {  
        public HandWriter()  
        {  
            this.InitializeComponent();  
            HandWriterViewModel bindingvm = new HandWriterViewModel();  
            bindingvm.NameInputREBControl = this.txtName;  
            bindingvm.InkCanvasControl = this.inkCanvas;  
  
            this.MyViewModel = bindingvm;  
        }  
  
        public HandWriterViewModel MyViewModel { get; set; }  
    }  

public class WinAppConstant  
    {  
        public const string StrProcessDenied = "0";  
  
        public const string StrProcessAllow = "1";  
    }  

269992-baseviewmodel.txt
269993-handwriterviewmodel.txt
269934-inputwhitelist.txt
269922-observable.txt

Thanks,
Steven

Universal Windows Platform (UWP)
{count} votes