アプリケーションがフリーズしないようにする
エクステンション側で長時間かかるような処理を実行する場合、アプリケーションがフリーズしたように見えることがあります。 次のコードのようにすると、エクステンションの実行中にUIを描画することができます。
using System.Windows.Threading;
/// <summary>
/// DoEvents
/// </summary>
void DoEvents()
{
var frame = new DispatcherFrame();
var callback = new DispatcherOperationCallback(obj =>
{
((DispatcherFrame)obj).Continue = false;
return null;
});
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, callback, frame);
Dispatcher.PushFrame(frame);
}
void SomeCommand(ICommandContext c, ICommandParams p)
{
for ( var i=0;i<100; i++)
{
// 何らかの処理
...
// アプリケーションの画面を更新させます
DoEvents();
}
}
注意
ユーザーインタフェースをブロックしない代わりに、画面の操作が可能になってしまい、想定しない動作となる場合がありますので利用には注意をしてください。