diff --git a/SQLite3Component/Database.cpp b/SQLite3Component/Database.cpp index 36dc11e..8646562 100644 --- a/SQLite3Component/Database.cpp +++ b/SQLite3Component/Database.cpp @@ -96,8 +96,8 @@ namespace SQLite3 { } // Need to remember the current thread for later callbacks into JS - CoreDispatcher^ dispatcher = CoreWindow::GetForCurrentThread()->Dispatcher; - + CoreDispatcher^ dispatcher = CoreWindow::GetForCurrentThread() ? CoreWindow::GetForCurrentThread()->Dispatcher : nullptr; + return Concurrency::create_async([dbPath, dispatcher]() { sqlite3* sqlite; int ret = sqlite3_open16(dbPath->Data(), &sqlite); @@ -178,30 +178,45 @@ namespace SQLite3 { if (insertChangeHandlers) { ChangeEvent event; event.RowId = rowId; - event.TableName = ToPlatformString(tableName); - handler = ref new DispatchedHandler([this, event]() { + event.TableName = ToPlatformString(tableName); + if (dispatcher == nullptr) { _Insert(this, event); - }); + return; + } else { + handler = ref new DispatchedHandler([this, event]() { + _Insert(this, event); + }); + } } break; case SQLITE_UPDATE: if (updateChangeHandlers) { ChangeEvent event; event.RowId = rowId; - event.TableName = ToPlatformString(tableName); - handler = ref new DispatchedHandler([this, event]() { + event.TableName = ToPlatformString(tableName); + if (dispatcher == nullptr) { _Update(this, event); - }); + return; + } else { + handler = ref new DispatchedHandler([this, event]() { + _Update(this, event); + }); + } } break; case SQLITE_DELETE: if (deleteChangeHandlers) { ChangeEvent event; event.RowId = rowId; - event.TableName = ToPlatformString(tableName); - handler = ref new DispatchedHandler([this, event]() { - _Delete(this, event); - }); + event.TableName = ToPlatformString(tableName); + if (dispatcher == nullptr) { + _Insert(this, event); + return; + } else { + handler = ref new DispatchedHandler([this, event]() { + _Delete(this, event); + }); + } } break; } diff --git a/SQLite3Component/Statement.cpp b/SQLite3Component/Statement.cpp index 490c04a..dd95b51 100644 --- a/SQLite3Component/Statement.cpp +++ b/SQLite3Component/Statement.cpp @@ -164,13 +164,17 @@ namespace SQLite3 { std::wostringstream output; GetRow(output); auto row = ref new Platform::String(output.str().c_str()); - auto callbackTask = Concurrency::task( - dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, - ref new Windows::UI::Core::DispatchedHandler([row, callback]() { - callback(row); - })) - ); - callbackTask.get(); + if (dispatcher) { + auto callbackTask = Concurrency::task( + dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, + ref new Windows::UI::Core::DispatchedHandler([row, callback]() { + callback(row); + })) + ); + callbackTask.get(); + } else { + callback(row); + } } }