Win 10 IOT thread deadlocking in UWP












0















What I want to do:
- synchronously (or even asynchronously) load settings from USB drive before first page loads



What I did:
- in OnLaunched method for App.xaml.cs I invoked this static function:



public static async void LoadSettings(string folderName = "Config", string fileName = "Settings.xml")
{
try
{
StorageFile configFile = null;
// scan through all devices
foreach (var device in await KnownFolders.RemovableDevices.GetFoldersAsync().AsTask().ConfigureAwait(false))
{
// folder that should have configuration
var configFolder = await device.GetFolderAsync(folderName).AsTask().ConfigureAwait(false);

if (configFile != null && configFolder != null && await configFolder.GetFileAsync(fileName).AsTask().ConfigureAwait(false) != null)
{
throw new Exception("More than one configuration file detected. First found configuration file will be used.");
}
else
configFile = await configFolder.GetFileAsync(fileName).AsTask().ConfigureAwait(false);
}

if (configFile == null)
throw new Exception("Configuration file was not found, please insert device with proper configuration path.");

string settingString = await FileIO.ReadTextAsync(configFile).AsTask().ConfigureAwait(false);

XmlSerializer serializer = new XmlSerializer(typeof(Settings));
using (TextReader reader = new StringReader(settingString))
{
AppSettings = (Settings)serializer.Deserialize(reader); // store settings in some static variable
}
}
catch (Exception e)
{

//return await Task.FromResult<string>(e.Message);
}

//return await Task.FromResult<string>(null);
}


As you can see right now it's async void method, so I don't even want to synchronize it in any way with UI thread. It should just fire and do something. With ConfigureAwait(false) I want to be sure that it will never try to return to context. These returns at the end are remnants of other things I tried (I wanted to do this better way, this is the most primitive solution and it still doesn't work).



Anyway, because that's where the fun begins: everything works well when I debug application on local machine with Win 10. And I get deadlocked thread on Win 10 IOT installed on Raspberry Pi 3 (I installed it from the scratch today, last version).



But deadlock is not the weirdest thing. Weirdest thing is when it appears.



Like I said, invocation of this method looks like that:



protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Configuration.Settings.LoadSettings();


After that everything in this method goes normally, so I navigate to my first page somewhere below:



if (e.PrelaunchActivated == false)
{
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(LogScreen), e.Arguments);
}

Window.Current.Activate();
}


Everything still works. User needs to write his code, I check if this code is available in settings and after that user can press "OK" to move to next page. Somewhere in LogScreenViewModel this method is responsible for that:



private void GoForward(bool isValid)
{
try
{
_navigationService.NavigateTo("MainPage"); // it's SimpleIoc navigation from MVVMLight
}
catch (Exception e)
{
Debug.WriteLine($"ERROR: {e.Message}");
}
}


And deadlock happens when _navigationService.NavigateTo("MainPage") is reached. Basically right now UI thread freezes. If I wait for long enough I will see catched exception in Output saying that messenger seemed occupied (I can't show the screen because I don't have access to that Raspberry right now) and after some timeout this thread was killed (like 30 seconds or something) - after that UI thread unlocks and application proceeds to MainPage. It doesn't happen on PC - MainPage appears immediately, no exceptions, no deadlocks.



I tried waiting on first page for like 1 minute to check if some deadlock exception would fire on it's own - but it doesn't. It will fire ONLY after I try to proceed to next page.



What else I tried instead of this fire-and-forget approach:




  • Making OnLaunched async and await LoadSettings returning Task - same thing happens in the same place, and no problem on PC.

  • Using:
    Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => await Configuration.Settings.LoadSettings(); ).AsTask().Wait(); If I remember correctly it deadlocked immediately on Wait(), even with ConfigureAwait(false) everywhere, but it also happened on PC.

  • Allowing LogScreen to load, make it's OnNavigatedTo method async and await LoadSettings - same deadlock in same place

  • Allowing LogScreen to load and use Dispatcher from there like in point 2. It deadlocked the same way after reaching Wait(), on PC too.

  • Trying to force LoadSettings to be fully synchronous by replacing every await with AsTask().GetAwaiter().GetResults(). It worked well on PC... and of course deadlock on Raspberry.


What am I missing? What else can I try? Because to be honest right now it looks to me that Win 10 IOT .NET runtime is bugged or something.










share|improve this question

























  • Did you try pausing the debugger when it deadlocks to see where it gets stuck?

    – Sunius
    Nov 23 '18 at 21:55











  • Just like I said : _navigationService.NavigateTo("MainPage"); It doesn't proceed to MainPage until this deadlocked thread gets killed after a timeout. Until then it stands there. Only on Raspberry. It doesn't get blocked if I don't load settings at all, so it's certainly related to these asynchronous operations.

    – Khaine
    Nov 23 '18 at 22:34













  • I meant actual callstack. Not what you call to get there.

    – Sunius
    Nov 23 '18 at 23:41











  • I think I tried to check callstack but it was empty. But I'm not sure if it was this particular issue. I will be able to check it after weekend.

    – Khaine
    Nov 24 '18 at 8:59











  • @Khaine, I have not reproduced this problem.Could you please provide a simple project in a shared repo?

    – Michael Xu - MSFT
    Nov 26 '18 at 6:50
















0















What I want to do:
- synchronously (or even asynchronously) load settings from USB drive before first page loads



What I did:
- in OnLaunched method for App.xaml.cs I invoked this static function:



public static async void LoadSettings(string folderName = "Config", string fileName = "Settings.xml")
{
try
{
StorageFile configFile = null;
// scan through all devices
foreach (var device in await KnownFolders.RemovableDevices.GetFoldersAsync().AsTask().ConfigureAwait(false))
{
// folder that should have configuration
var configFolder = await device.GetFolderAsync(folderName).AsTask().ConfigureAwait(false);

if (configFile != null && configFolder != null && await configFolder.GetFileAsync(fileName).AsTask().ConfigureAwait(false) != null)
{
throw new Exception("More than one configuration file detected. First found configuration file will be used.");
}
else
configFile = await configFolder.GetFileAsync(fileName).AsTask().ConfigureAwait(false);
}

if (configFile == null)
throw new Exception("Configuration file was not found, please insert device with proper configuration path.");

string settingString = await FileIO.ReadTextAsync(configFile).AsTask().ConfigureAwait(false);

XmlSerializer serializer = new XmlSerializer(typeof(Settings));
using (TextReader reader = new StringReader(settingString))
{
AppSettings = (Settings)serializer.Deserialize(reader); // store settings in some static variable
}
}
catch (Exception e)
{

//return await Task.FromResult<string>(e.Message);
}

//return await Task.FromResult<string>(null);
}


As you can see right now it's async void method, so I don't even want to synchronize it in any way with UI thread. It should just fire and do something. With ConfigureAwait(false) I want to be sure that it will never try to return to context. These returns at the end are remnants of other things I tried (I wanted to do this better way, this is the most primitive solution and it still doesn't work).



Anyway, because that's where the fun begins: everything works well when I debug application on local machine with Win 10. And I get deadlocked thread on Win 10 IOT installed on Raspberry Pi 3 (I installed it from the scratch today, last version).



But deadlock is not the weirdest thing. Weirdest thing is when it appears.



Like I said, invocation of this method looks like that:



protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Configuration.Settings.LoadSettings();


After that everything in this method goes normally, so I navigate to my first page somewhere below:



if (e.PrelaunchActivated == false)
{
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(LogScreen), e.Arguments);
}

Window.Current.Activate();
}


Everything still works. User needs to write his code, I check if this code is available in settings and after that user can press "OK" to move to next page. Somewhere in LogScreenViewModel this method is responsible for that:



private void GoForward(bool isValid)
{
try
{
_navigationService.NavigateTo("MainPage"); // it's SimpleIoc navigation from MVVMLight
}
catch (Exception e)
{
Debug.WriteLine($"ERROR: {e.Message}");
}
}


And deadlock happens when _navigationService.NavigateTo("MainPage") is reached. Basically right now UI thread freezes. If I wait for long enough I will see catched exception in Output saying that messenger seemed occupied (I can't show the screen because I don't have access to that Raspberry right now) and after some timeout this thread was killed (like 30 seconds or something) - after that UI thread unlocks and application proceeds to MainPage. It doesn't happen on PC - MainPage appears immediately, no exceptions, no deadlocks.



I tried waiting on first page for like 1 minute to check if some deadlock exception would fire on it's own - but it doesn't. It will fire ONLY after I try to proceed to next page.



What else I tried instead of this fire-and-forget approach:




  • Making OnLaunched async and await LoadSettings returning Task - same thing happens in the same place, and no problem on PC.

  • Using:
    Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => await Configuration.Settings.LoadSettings(); ).AsTask().Wait(); If I remember correctly it deadlocked immediately on Wait(), even with ConfigureAwait(false) everywhere, but it also happened on PC.

  • Allowing LogScreen to load, make it's OnNavigatedTo method async and await LoadSettings - same deadlock in same place

  • Allowing LogScreen to load and use Dispatcher from there like in point 2. It deadlocked the same way after reaching Wait(), on PC too.

  • Trying to force LoadSettings to be fully synchronous by replacing every await with AsTask().GetAwaiter().GetResults(). It worked well on PC... and of course deadlock on Raspberry.


What am I missing? What else can I try? Because to be honest right now it looks to me that Win 10 IOT .NET runtime is bugged or something.










share|improve this question

























  • Did you try pausing the debugger when it deadlocks to see where it gets stuck?

    – Sunius
    Nov 23 '18 at 21:55











  • Just like I said : _navigationService.NavigateTo("MainPage"); It doesn't proceed to MainPage until this deadlocked thread gets killed after a timeout. Until then it stands there. Only on Raspberry. It doesn't get blocked if I don't load settings at all, so it's certainly related to these asynchronous operations.

    – Khaine
    Nov 23 '18 at 22:34













  • I meant actual callstack. Not what you call to get there.

    – Sunius
    Nov 23 '18 at 23:41











  • I think I tried to check callstack but it was empty. But I'm not sure if it was this particular issue. I will be able to check it after weekend.

    – Khaine
    Nov 24 '18 at 8:59











  • @Khaine, I have not reproduced this problem.Could you please provide a simple project in a shared repo?

    – Michael Xu - MSFT
    Nov 26 '18 at 6:50














0












0








0








What I want to do:
- synchronously (or even asynchronously) load settings from USB drive before first page loads



What I did:
- in OnLaunched method for App.xaml.cs I invoked this static function:



public static async void LoadSettings(string folderName = "Config", string fileName = "Settings.xml")
{
try
{
StorageFile configFile = null;
// scan through all devices
foreach (var device in await KnownFolders.RemovableDevices.GetFoldersAsync().AsTask().ConfigureAwait(false))
{
// folder that should have configuration
var configFolder = await device.GetFolderAsync(folderName).AsTask().ConfigureAwait(false);

if (configFile != null && configFolder != null && await configFolder.GetFileAsync(fileName).AsTask().ConfigureAwait(false) != null)
{
throw new Exception("More than one configuration file detected. First found configuration file will be used.");
}
else
configFile = await configFolder.GetFileAsync(fileName).AsTask().ConfigureAwait(false);
}

if (configFile == null)
throw new Exception("Configuration file was not found, please insert device with proper configuration path.");

string settingString = await FileIO.ReadTextAsync(configFile).AsTask().ConfigureAwait(false);

XmlSerializer serializer = new XmlSerializer(typeof(Settings));
using (TextReader reader = new StringReader(settingString))
{
AppSettings = (Settings)serializer.Deserialize(reader); // store settings in some static variable
}
}
catch (Exception e)
{

//return await Task.FromResult<string>(e.Message);
}

//return await Task.FromResult<string>(null);
}


As you can see right now it's async void method, so I don't even want to synchronize it in any way with UI thread. It should just fire and do something. With ConfigureAwait(false) I want to be sure that it will never try to return to context. These returns at the end are remnants of other things I tried (I wanted to do this better way, this is the most primitive solution and it still doesn't work).



Anyway, because that's where the fun begins: everything works well when I debug application on local machine with Win 10. And I get deadlocked thread on Win 10 IOT installed on Raspberry Pi 3 (I installed it from the scratch today, last version).



But deadlock is not the weirdest thing. Weirdest thing is when it appears.



Like I said, invocation of this method looks like that:



protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Configuration.Settings.LoadSettings();


After that everything in this method goes normally, so I navigate to my first page somewhere below:



if (e.PrelaunchActivated == false)
{
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(LogScreen), e.Arguments);
}

Window.Current.Activate();
}


Everything still works. User needs to write his code, I check if this code is available in settings and after that user can press "OK" to move to next page. Somewhere in LogScreenViewModel this method is responsible for that:



private void GoForward(bool isValid)
{
try
{
_navigationService.NavigateTo("MainPage"); // it's SimpleIoc navigation from MVVMLight
}
catch (Exception e)
{
Debug.WriteLine($"ERROR: {e.Message}");
}
}


And deadlock happens when _navigationService.NavigateTo("MainPage") is reached. Basically right now UI thread freezes. If I wait for long enough I will see catched exception in Output saying that messenger seemed occupied (I can't show the screen because I don't have access to that Raspberry right now) and after some timeout this thread was killed (like 30 seconds or something) - after that UI thread unlocks and application proceeds to MainPage. It doesn't happen on PC - MainPage appears immediately, no exceptions, no deadlocks.



I tried waiting on first page for like 1 minute to check if some deadlock exception would fire on it's own - but it doesn't. It will fire ONLY after I try to proceed to next page.



What else I tried instead of this fire-and-forget approach:




  • Making OnLaunched async and await LoadSettings returning Task - same thing happens in the same place, and no problem on PC.

  • Using:
    Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => await Configuration.Settings.LoadSettings(); ).AsTask().Wait(); If I remember correctly it deadlocked immediately on Wait(), even with ConfigureAwait(false) everywhere, but it also happened on PC.

  • Allowing LogScreen to load, make it's OnNavigatedTo method async and await LoadSettings - same deadlock in same place

  • Allowing LogScreen to load and use Dispatcher from there like in point 2. It deadlocked the same way after reaching Wait(), on PC too.

  • Trying to force LoadSettings to be fully synchronous by replacing every await with AsTask().GetAwaiter().GetResults(). It worked well on PC... and of course deadlock on Raspberry.


What am I missing? What else can I try? Because to be honest right now it looks to me that Win 10 IOT .NET runtime is bugged or something.










share|improve this question
















What I want to do:
- synchronously (or even asynchronously) load settings from USB drive before first page loads



What I did:
- in OnLaunched method for App.xaml.cs I invoked this static function:



public static async void LoadSettings(string folderName = "Config", string fileName = "Settings.xml")
{
try
{
StorageFile configFile = null;
// scan through all devices
foreach (var device in await KnownFolders.RemovableDevices.GetFoldersAsync().AsTask().ConfigureAwait(false))
{
// folder that should have configuration
var configFolder = await device.GetFolderAsync(folderName).AsTask().ConfigureAwait(false);

if (configFile != null && configFolder != null && await configFolder.GetFileAsync(fileName).AsTask().ConfigureAwait(false) != null)
{
throw new Exception("More than one configuration file detected. First found configuration file will be used.");
}
else
configFile = await configFolder.GetFileAsync(fileName).AsTask().ConfigureAwait(false);
}

if (configFile == null)
throw new Exception("Configuration file was not found, please insert device with proper configuration path.");

string settingString = await FileIO.ReadTextAsync(configFile).AsTask().ConfigureAwait(false);

XmlSerializer serializer = new XmlSerializer(typeof(Settings));
using (TextReader reader = new StringReader(settingString))
{
AppSettings = (Settings)serializer.Deserialize(reader); // store settings in some static variable
}
}
catch (Exception e)
{

//return await Task.FromResult<string>(e.Message);
}

//return await Task.FromResult<string>(null);
}


As you can see right now it's async void method, so I don't even want to synchronize it in any way with UI thread. It should just fire and do something. With ConfigureAwait(false) I want to be sure that it will never try to return to context. These returns at the end are remnants of other things I tried (I wanted to do this better way, this is the most primitive solution and it still doesn't work).



Anyway, because that's where the fun begins: everything works well when I debug application on local machine with Win 10. And I get deadlocked thread on Win 10 IOT installed on Raspberry Pi 3 (I installed it from the scratch today, last version).



But deadlock is not the weirdest thing. Weirdest thing is when it appears.



Like I said, invocation of this method looks like that:



protected override void OnLaunched(LaunchActivatedEventArgs e)
{
Configuration.Settings.LoadSettings();


After that everything in this method goes normally, so I navigate to my first page somewhere below:



if (e.PrelaunchActivated == false)
{
if (rootFrame.Content == null)
{
rootFrame.Navigate(typeof(LogScreen), e.Arguments);
}

Window.Current.Activate();
}


Everything still works. User needs to write his code, I check if this code is available in settings and after that user can press "OK" to move to next page. Somewhere in LogScreenViewModel this method is responsible for that:



private void GoForward(bool isValid)
{
try
{
_navigationService.NavigateTo("MainPage"); // it's SimpleIoc navigation from MVVMLight
}
catch (Exception e)
{
Debug.WriteLine($"ERROR: {e.Message}");
}
}


And deadlock happens when _navigationService.NavigateTo("MainPage") is reached. Basically right now UI thread freezes. If I wait for long enough I will see catched exception in Output saying that messenger seemed occupied (I can't show the screen because I don't have access to that Raspberry right now) and after some timeout this thread was killed (like 30 seconds or something) - after that UI thread unlocks and application proceeds to MainPage. It doesn't happen on PC - MainPage appears immediately, no exceptions, no deadlocks.



I tried waiting on first page for like 1 minute to check if some deadlock exception would fire on it's own - but it doesn't. It will fire ONLY after I try to proceed to next page.



What else I tried instead of this fire-and-forget approach:




  • Making OnLaunched async and await LoadSettings returning Task - same thing happens in the same place, and no problem on PC.

  • Using:
    Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () => await Configuration.Settings.LoadSettings(); ).AsTask().Wait(); If I remember correctly it deadlocked immediately on Wait(), even with ConfigureAwait(false) everywhere, but it also happened on PC.

  • Allowing LogScreen to load, make it's OnNavigatedTo method async and await LoadSettings - same deadlock in same place

  • Allowing LogScreen to load and use Dispatcher from there like in point 2. It deadlocked the same way after reaching Wait(), on PC too.

  • Trying to force LoadSettings to be fully synchronous by replacing every await with AsTask().GetAwaiter().GetResults(). It worked well on PC... and of course deadlock on Raspberry.


What am I missing? What else can I try? Because to be honest right now it looks to me that Win 10 IOT .NET runtime is bugged or something.







c# asynchronous uwp raspberry-pi windows-10-iot-core






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 23 '18 at 19:37







Khaine

















asked Nov 23 '18 at 19:32









KhaineKhaine

3610




3610













  • Did you try pausing the debugger when it deadlocks to see where it gets stuck?

    – Sunius
    Nov 23 '18 at 21:55











  • Just like I said : _navigationService.NavigateTo("MainPage"); It doesn't proceed to MainPage until this deadlocked thread gets killed after a timeout. Until then it stands there. Only on Raspberry. It doesn't get blocked if I don't load settings at all, so it's certainly related to these asynchronous operations.

    – Khaine
    Nov 23 '18 at 22:34













  • I meant actual callstack. Not what you call to get there.

    – Sunius
    Nov 23 '18 at 23:41











  • I think I tried to check callstack but it was empty. But I'm not sure if it was this particular issue. I will be able to check it after weekend.

    – Khaine
    Nov 24 '18 at 8:59











  • @Khaine, I have not reproduced this problem.Could you please provide a simple project in a shared repo?

    – Michael Xu - MSFT
    Nov 26 '18 at 6:50



















  • Did you try pausing the debugger when it deadlocks to see where it gets stuck?

    – Sunius
    Nov 23 '18 at 21:55











  • Just like I said : _navigationService.NavigateTo("MainPage"); It doesn't proceed to MainPage until this deadlocked thread gets killed after a timeout. Until then it stands there. Only on Raspberry. It doesn't get blocked if I don't load settings at all, so it's certainly related to these asynchronous operations.

    – Khaine
    Nov 23 '18 at 22:34













  • I meant actual callstack. Not what you call to get there.

    – Sunius
    Nov 23 '18 at 23:41











  • I think I tried to check callstack but it was empty. But I'm not sure if it was this particular issue. I will be able to check it after weekend.

    – Khaine
    Nov 24 '18 at 8:59











  • @Khaine, I have not reproduced this problem.Could you please provide a simple project in a shared repo?

    – Michael Xu - MSFT
    Nov 26 '18 at 6:50

















Did you try pausing the debugger when it deadlocks to see where it gets stuck?

– Sunius
Nov 23 '18 at 21:55





Did you try pausing the debugger when it deadlocks to see where it gets stuck?

– Sunius
Nov 23 '18 at 21:55













Just like I said : _navigationService.NavigateTo("MainPage"); It doesn't proceed to MainPage until this deadlocked thread gets killed after a timeout. Until then it stands there. Only on Raspberry. It doesn't get blocked if I don't load settings at all, so it's certainly related to these asynchronous operations.

– Khaine
Nov 23 '18 at 22:34







Just like I said : _navigationService.NavigateTo("MainPage"); It doesn't proceed to MainPage until this deadlocked thread gets killed after a timeout. Until then it stands there. Only on Raspberry. It doesn't get blocked if I don't load settings at all, so it's certainly related to these asynchronous operations.

– Khaine
Nov 23 '18 at 22:34















I meant actual callstack. Not what you call to get there.

– Sunius
Nov 23 '18 at 23:41





I meant actual callstack. Not what you call to get there.

– Sunius
Nov 23 '18 at 23:41













I think I tried to check callstack but it was empty. But I'm not sure if it was this particular issue. I will be able to check it after weekend.

– Khaine
Nov 24 '18 at 8:59





I think I tried to check callstack but it was empty. But I'm not sure if it was this particular issue. I will be able to check it after weekend.

– Khaine
Nov 24 '18 at 8:59













@Khaine, I have not reproduced this problem.Could you please provide a simple project in a shared repo?

– Michael Xu - MSFT
Nov 26 '18 at 6:50





@Khaine, I have not reproduced this problem.Could you please provide a simple project in a shared repo?

– Michael Xu - MSFT
Nov 26 '18 at 6:50












1 Answer
1






active

oldest

votes


















0














I think I resolved the issue. This code was generally speaking not mine and after some digging I noticed that someone before me tried to list some other external devices while navigating to MainPage. It was not really async-safe code (someone probably wasn't aware of synchronization context) and it worked on Win 10 only because on desktop it was looking for COM0 device and I only have COM2, so method causing trouble was not even invoked at all.



I still have no idea how related it was to my configuration (because it somehow was working without it), but after I fixed issues with this old not-async-safe code it started to behave as expected.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53452095%2fwin-10-iot-thread-deadlocking-in-uwp%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I think I resolved the issue. This code was generally speaking not mine and after some digging I noticed that someone before me tried to list some other external devices while navigating to MainPage. It was not really async-safe code (someone probably wasn't aware of synchronization context) and it worked on Win 10 only because on desktop it was looking for COM0 device and I only have COM2, so method causing trouble was not even invoked at all.



    I still have no idea how related it was to my configuration (because it somehow was working without it), but after I fixed issues with this old not-async-safe code it started to behave as expected.






    share|improve this answer




























      0














      I think I resolved the issue. This code was generally speaking not mine and after some digging I noticed that someone before me tried to list some other external devices while navigating to MainPage. It was not really async-safe code (someone probably wasn't aware of synchronization context) and it worked on Win 10 only because on desktop it was looking for COM0 device and I only have COM2, so method causing trouble was not even invoked at all.



      I still have no idea how related it was to my configuration (because it somehow was working without it), but after I fixed issues with this old not-async-safe code it started to behave as expected.






      share|improve this answer


























        0












        0








        0







        I think I resolved the issue. This code was generally speaking not mine and after some digging I noticed that someone before me tried to list some other external devices while navigating to MainPage. It was not really async-safe code (someone probably wasn't aware of synchronization context) and it worked on Win 10 only because on desktop it was looking for COM0 device and I only have COM2, so method causing trouble was not even invoked at all.



        I still have no idea how related it was to my configuration (because it somehow was working without it), but after I fixed issues with this old not-async-safe code it started to behave as expected.






        share|improve this answer













        I think I resolved the issue. This code was generally speaking not mine and after some digging I noticed that someone before me tried to list some other external devices while navigating to MainPage. It was not really async-safe code (someone probably wasn't aware of synchronization context) and it worked on Win 10 only because on desktop it was looking for COM0 device and I only have COM2, so method causing trouble was not even invoked at all.



        I still have no idea how related it was to my configuration (because it somehow was working without it), but after I fixed issues with this old not-async-safe code it started to behave as expected.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 26 '18 at 13:14









        KhaineKhaine

        3610




        3610






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53452095%2fwin-10-iot-thread-deadlocking-in-uwp%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Berounka

            Sphinx de Gizeh

            Different font size/position of beamer's navigation symbols template's content depending on regular/plain...