顧客用のネイティブWindows 10クライアントLOBアプリケーションを開発します。
環境:Windows 10 Pro(モバイルクライアント/タブレットおよび開発者ボックス上)、アップデート3を適用したVisual Studio 2015 Professional、インストールされているすべてのアップデートおよびパッチ。クライアントアプリケーションは最新の「Windows 8 UniversalおよびWindows 10ユニバーサルプラットフォーム用IBM MobileFirst SDK」を使用しています。バージョン8.0.2016070716MobileFirst 8.0未処理例外のネイティブWindows 10クライアントアプリケーションエラー
アプリケーションは、アプリケーションがオンラインでMobileFirst 8.0サーバーに到達すると非常にうまく動作します。 サーバーにアクセスできない場合(オフライン、MFPサーバーが停止した場合)、クライアントアプリケーションのアプリケーションクラッシュが発生しています。 MobileFirst C#クライアントライブラリ内から起動されたワーカースレッドが例外をスローしたようです。この例外は私のコードでは無視できません。ここで
は、問題を示すためにいくつかのコードです:
private async Task<WorklightAccessToken> ConnectMobileFirst()
{
try
{
IWorklightClient _client = WorklightClient.CreateInstance();
WorklightAuthorizationManager _wlauthManager =
_client.AuthorizationManager;
WorklightAccessToken temp1 = await
_wlauthManager.ObtainAccessToken("");
return temp1;
}
catch (Exception exception)
{
Debug.WriteLine("Exception occured " + exception.Message);
return null;
}
}
は、新しい空白のアプリを作成し、OnLaunchedのEventHandlerから上記の関数を呼び出します。
AccessToken = await ConnectMobileFirst();
if (AccessToken != null)
{
Debug.WriteLine(AccessToken.IsValidToken
? "Connection OK, AccessToken is valid"
: "AccesToken NOT valid");
}
MobileFirstサーバーにアクセスできる場合は、すべてが正常に動作し、AccessToken.IsValidTokenがtrueである場合。
MobileFirstサーバがオフラインである場合、次の問題が発生した:
- 機能
ConnectMobileFirst()
終了とAccessTokenオブジェクトが返される(例外は、メソッド内で発生していない) - AccessToken.IsValidTokenがある(偽でありますMobileFirstサーバーはオフラインです)。
- プログラムが
Debug.WriteLine
ステートメントを実行する前に、そして時には後で、別のスレッドがNullReferenceExceptionにヒットすることがあります。この「他の」ワーカー・スレッドは、IBMMobileFirstPlatformFoundationWin10.dll内のObtainAccessToken()
コール内のどこかで開始されました。 mscorlib.ni.dll WinRTの情報に 'System.Runtime.InteropServices.COMException':スロー
例外:Visual Studioで[出力]ウィンドウには、次の情報が含まれていSerververbindung konnte NICHT hergestelltのwerdenダイ。スロー
例外: mscorlib.ni.dll WinRTの情報の 'System.Runtime.InteropServices.COMException': hergestelltのwerden NICHT Serververbindung konnteダイ。
'MFPUnhandledExc1.exe'(CoreCLR:CoreCLR_UWP_Domain):ロード 'D:\ VS2015Projects \ MFPUnhandledExc1 \ binに\ X86 \デバッグ\ APPX \ System.Resources.ResourceManager.dll'。 モジュールはシンボルなしで作成されました。例外がスローされました: 'System.Net.Http.HttpRequestException' in System.Net.Http.dll 例外がスローされました: 'System.Net.Http.HttpRequestException' in mscorlib.ni.dll Exception throw: 'System.Net。 Http.HttpRequestException ' 例外がスローSystem.Net.Http.dllに: 'System.Net.Http.HttpRequestExceptionをMFPUnhandledExc1.exe' mscorlib.ni.dllに ''(CoreCLR:CoreCLR_UWP_Domain): ロード ' D:\ VS2015Projects \ MFPUnhandledExc1 \ bin \ x86 \ Debug \ AppX \ System.Runtime.InteropServices.dll 'をクリックします。 PDBファイルを見つけたり開くことができません。 'System.Net.Http.HttpRequestException' mscorlib.ni.dll例外 でスロー:例外がスローさSystem.Net.Requests.dll例外 の 'System.Net.WebException' スロー: 'System.NullReferenceException' の IBMMobileFirstPlatformFoundationWin10に.dllが
ConnectMobileFirst()
あなたは、そのコールスタックにIBMMobileFirstPlatformFoundationWin10.dllを持って、まだアクティブなワーカースレッドがある見ることができます呼び出した後、あなたは行にブレークポイントを設定した場合。バックエンド接続がOKの場合、このスレッドはもう存在しません。
この動作は、MobileFirst Serverがオフラインであるだけでなく、サーバーの応答が遅い、またはネットワークが低速で、サーバーの応答が大きい場合にも発生します。これは接続中だけでなく、WorklightResourceRequest.send()
の間にも発生します。
私の質問:
- 私は自分のアプリケーションを殺すからこの浮遊スレッドを防ぐために何ができますか? (短期的な解決策)
- なぜObtainAccessToken()への呼び出しがすでに終了していても、ワーカースレッドはまだ存在しますか?
- このスレッドは例外を処理しないのはなぜですか?