charlenni / MapsforgeSharp

Mapsforge port to C#
10 stars 7 forks source link

ExternalRenderTheme error #10

Open mrGhostage opened 4 years ago

mrGhostage commented 4 years ago

Hello. I have a problem after using ExternalRenderTheme.CreateExternalRenderTheme. Project MapsforgeSharp.TileProvider.Test works perfect. I copied all code into my project, and after that I saw a strange thing: If I set a break point on this lines in debug (class: ExternalRenderTheme.cs; function: Initialize):

var fileExists = await FileSystem.Current.LocalStorage.CheckExistsAsync(renderThemeFilePath); ... this.renderThemeFile = await FileSystem.Current.LocalStorage.GetFileAsync(renderThemeFilePath); ... this.renderThemeFileStream = await this.renderThemeFile.OpenAsync(FileAccess.Read);

everything is fine. If I remove any of these break points, after

var renderTheme = ExternalRenderTheme.CreateExternalRenderTheme(PortablePath.Combine(new string[] { "osmarender", "osmarender.xml" }));

renderTheme.RenderThemeAsStream is null or renderTheme.renderThemeFile is null.

I'm guessing it might happen because of async call function ExternalRenderTheme.Initialize, but why MapsforgeSharp.TileProvider.Test works ???

I'll be glad to any ideas!

mrGhostage commented 4 years ago

addition: this code works great in a Console App. Wpf App or Windows Forms App don't.

mrGhostage commented 4 years ago

I solved this problem: I created my own class copy of ExternalRenderTheme class and change Initialize function:

public class ExternalRenderThemeMy : IXmlRenderTheme ... public void Initialize(string renderThemeFilePath, XmlRenderThemeMenuCallback menuCallback) ... var fileExists = FileSystem.Current.LocalStorage.CheckExistsAsync(renderThemeFilePath).Result; ... this.renderThemeFile = FileSystem.Current.LocalStorage.GetFileAsync(renderThemeFilePath).Result;
this.renderThemeFileStream = this.renderThemeFile.OpenAsync(FileAccess.Read).Result; ...