私は「AccountManagementView」の形を持っているのWinFormsアプリケーションを作成しています。フォームが作成されるたびに、長いタスクが発生した直後。私の目標は、最初にフォームを作成し、長いタスクを実行しているときにユーザーがフォームとやりとりできるようにすることです。
ソリューション(今のところ)
私の戦略はこれまでに、フォームのコンストラクタのプライベートを行い、代わりにフォームを作成するために、非同期ファクトリメソッドを使用することです。フォームが作成された後、ファクトリメソッドはロングタスクを開始します。
public partial class AccountManagementView : Form, IAccountManagementView
{
private AccountManagementView()
{
InitializeComponent();
}
public static async Task<AccountManagementView> CreateAsync()
{
AccountManagementView view = new AccountManagementView();
await view.LongTask();
return view;
}
private async Task LongTask()
{
await Task.Delay(5000);
this.lblTitle.Text = "Account Management - Loaded";
}
}
質問
どのように私はIoCコンテナシンプルインジェクタを使用して、このファクトリを登録できますか? 「Dispatch.UI.Windows」に 『System.Threading.Tasks.Task』から変換することはできません:私は、次のエラーメッセージが出てい、その試みで
container.RegisterSingleton<AccountManagementView>(AccountManagementView.CreateAsync());
:私は経由して、フォームを登録しようとしましたあなたがユーザーとの対話をしたいので.Views.Account.AccountManagementView 'が」
から
async Task<AccountManagementView> CreateAsync()
変更をしようと、私が何をしたいことは、物事の非同期を作っていないと思いますが、単純にバックグラウンドタスクとして長い操作をスピンアップ。 – Stevenありがとう@Steven。私は、await/asyncを使うことは基本的にそれをバックグラウンドタスクにしていると思っていました。 [BackgroundWorker](https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx?ppud=4)の使用について話していますか?技術的な視点とは何が違うのですか?私は待っている/非同期ではできないことはできないのですか? – Andrew
しかし、基本的に、 'Task'を返すメソッドがありますが、あなたは 'T'を登録しています。 'Task 'を登録してください。 –
Steven