2016-11-20 4 views
0

UWP 응용 프로그램에서 InkCanvas의 내용을 저장하는 데 문제가 있습니다. 디버그 모드에서는 모두 완벽하게 작동합니다. 릴리스 모드에서는 저장할 수 없습니다.릴리스 모드가 켜져있을 때 UWP 응용 프로그램의 InkCanvas 내용을 SQLite Datebase에 저장할 수 없습니다.

sqlite DB의 blob은 항상 비어 있습니다 (릴리스 모드). 여기

내 코드입니다 : 아마 UWP 프로가 나를 도울 수

static public byte[] GetByteArray(InkCanvas CardInkCanvas) { 
    MemoryStream ms = new MemoryStream(); 

    // Write the ink strokes to the output stream. 
    using(IOutputStream outputStream = ms.AsOutputStream()) { 
     CardInkCanvas.InkPresenter.StrokeContainer.SaveAsync(ms.AsOutputStream()); 
     outputStream.FlushAsync(); 
    } 

    return ms.ToArray(); 
} 

:

감사 Agredo

+0

반환되는 배열의 내용이 비어 있지 않은지 확인할 수 있습니까? –

+0

릴리스 모드에서 비어 있습니다. 디버그 모드에서 완벽하게 작동합니다. – Agredo

답변

0

나는 InkCanvas의 내용을 저장에 문제가 UWP 앱에서 디버그 모드에서는 모두 완벽하게 작동합니다. 릴리스 모드에서는 저장할 수 없습니다.

릴리스 컴파일 .Net Native 기본적으로 사용. 따라서 디버그 모드와 비교하여 몇 가지 다른 동작이 있습니다.

이 경우 CardInkCanvas.InkPresenter.StrokeContainer.SaveAsyncoutputStream.FlushAsync은 비동기 함수이므로 await을 앞에 추가해야합니다. 따라서 코드는 다음과 같아야합니다.

static public async Task<byte[]> GetByteArray(InkCanvas CardInkCanvas) { 
    MemoryStream ms = new MemoryStream(); 

    // Write the ink strokes to the output stream. 
    using(IOutputStream outputStream = ms.AsOutputStream()) { 
     //Add await before async functions so that the async functions get executed before return. 
     await CardInkCanvas.InkPresenter.StrokeContainer.SaveAsync(ms.AsOutputStream()); 
     await outputStream.FlushAsync(); 
    } 

    return ms.ToArray(); 
} 
+0

함수도'async'로 선언되어야합니다. –

+0

고마워,하지만 지금 내 코드 바이트 [] strokeContainerArray = GetByteArrayAsync (CardInkCanvas). 결과; 릴리즈 모드에서 멈 춥니 다. 디버그 모드에서 작동합니다. – Agredo

+0

예,'async'를 추가하고 반환 유형을'Task '으로 변경하는 것을 잊었습니다. @ PeterTorr-MSFT 상기시켜 주셔서 감사합니다. @Agredo, 대답을 업데이트했습니다. 업데이트 된 코드를 사용해보십시오. –