私は SAP .NET Connector 3.0 を使用しており、別のスレッドを使用してログインしようとしているので、UI に一種のログイン アニメーションを表示させることができます。
ログインを開始するために Async と Await を使用していますが、ログイン中に UI が約 10 秒間ハングします。
これがコードです。私はすぐにプログラムを作成しているので、ラフです。
async void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Busy.Visibility = System.Windows.Visibility.Visible; // Shows progress animation
if (await SAPLogin()) // Waits for login to finish, will always be true at the moment
{
await GetData(); // does things with sap
Busy.Visibility = System.Windows.Visibility.Collapsed; // Hides progress animation
}
}
private Task<bool> SAPLogin()
{
bool LoggedIn = true;
return Task.Run(() =>
{
Backend = new BackendConfig();
RfcDestinationManager.RegisterDestinationConfiguration(Backend);
SapRfcDestination = RfcDestinationManager.GetDestination(MyServer); // MyServer is just a string containing sever name
SapRap = SapRfcDestination.Repository;
BapiMD04 = SapRap.CreateFunction("MD_STOCK_REQUIREMENTS_LIST_API");
BapiMD04.SetValue("WERKS", "140");
return LoggedIn;
});
}
タスク内の何かが UI を使用しているとしか想像できませんか?
EDIT 1:申し訳ありませんが、何を説明するのを忘れましたGetData()
。
GetData()
SAP でさまざまなレポートを実行します (大量のコード)。小さなログイン アニメーションが「ログイン」から「データの取得」に変わるので、視覚的にいつそこにあるかがわかります。UI がハングアップするのは、「ログイン」段階であることがわかります。ログイン アニメーションでは、単純な円が回転します。これはログインの途中で停止し、約 5 秒後に継続します。
EDIT 2: この行でハングが発生しているようです
SapRfcDestination = RfcDestinationManager.GetDestination(MyServer);
編集 3: UI がハングした時点でアプリケーションを一時停止すると、スレッドの写真が追加されました。