sigsend.AddStrokes (e1) вызовет DEBUG &&! DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION. sigend - это экземпляр класса контейнера для рукописного ввода в приложении UWP.
ниже приведен код:
inkpane.InkPresenter.StrokesCollected += rooPage.snink;
public async void snink(InkPresenter sender, InkStrokesCollectedEventArgs args)
{ task.run(()=>
{ sigsend.Clear();
sigsend.AddStrokes(e1);
var lstream = new MemoryStream();
await sigsend.SaveAsync(lstream.AsOutputStream());
var siginkbuffer = lstream.ToArray();
});
}
sigend - это контейнер для рукописного ввода. это приведет к тому, что [DEBUG &&! DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION]
у меня есть много методов, таких как use task.run или Windows.System.Threading.ThreadPool.RunAsync, чтобы убедиться, что задача запускается в фоновом режиме. , но бесполезно. Я также пытаюсь использовать task.run для запуска этого кода в фоновой задаче, а в задании backgroun используйте и (CoreDispatcherPriority.Low, async () => и т. Д. Для запуска sigsend.AddStrokes (e1) для просмотра потока пользовательского интерфейса. Но все они бесполезны, они всегда вызывают DEBUG &&! DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION.
sigsend не привязан к инккане, я просто использую его для сериализации чернильного удара в нем.
Почему? Что? это причина? Я думаю, что это какой-то вопрос в UI Threading.
new:
Я попробовал какой-то другой код, обнаружил, что, кажется, это asyncМетод await вызывает это, если
inkpane.InkPresenter.StrokesCollected += rooPage.snink;
public **async** void snink(InkPresenter sender, InkStrokesCollectedEventArgs args)
{ await task.run(etc.);
}
вызовет ошибку.
Я должен открыть новую задачу, потому что если рабочая нагрузка в привязкеМетод события InkPresenter.StrokesCollected слишком тяжелый, он также вызовет DEBUG &&! DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION. Но если я использую await task.run () и добавлю асинхронность в метод snink, это вызоветDEBUG &&! DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION.
Итак, вопрос в том, как безопасно открыть поток?
new1 Ниже приведен простой код, я не посещаю код пользовательского интерфейса в task.run .ink1элемент управления пользовательским интерфейсом в xamlistring является строкой json размером около 1 КБ. и запустить этот код, он вызовет
#if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
UnhandledException += (sender, e) =>
{
if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();
ниже простой код.
public sealed partial class wpage : Page
{
public wpage()
{
this.InitializeComponent();
ink1.InkPresenter.StrokeContainer = inkStrokeContainer1;
ink1.InkPresenter.StrokesCollected += InkPresenter_StrokesCollected;
ink1.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Pen | CoreInputDeviceTypes.Mouse;
}
string istring;
public async void InkPresenter_StrokesCollected(InkPresenter sender, InkStrokesCollectedEventArgs args)
{
await sic(istring);
}
public Task sic (String js)
{
var ts = Task.Run(async () =>
{
using (MemoryStream memoryStream1 = new MemoryStream())
{
using (StreamWriter streamWriter1 = new StreamWriter(memoryStream1))
{
await streamWriter1.WriteAsync(js);
await streamWriter1.FlushAsync();
using (MemoryStream memoryStream2 = new MemoryStream())
{
Compressor compressor1 = new Compressor(memoryStream2.AsOutputStream(), CompressAlgorithm.Lzms, 32768);
await compressor1.WriteAsync(memoryStream1.ToArray().AsBuffer());
await compressor1.FinishAsync();
}
}
}
});
return ts;
}
}