2016-06-17 2 views
1

背景シンプルインジェクタ

私は「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 'が」

+0

からasync Task<AccountManagementView> CreateAsync()変更をしようと、私が何をしたいことは、物事の非同期を作っていないと思いますが、単純にバックグラウンドタスクとして長い操作をスピンアップ。 – Steven

+0

ありがとう@Steven。私は、await/asyncを使うことは基本的にそれをバックグラウンドタスクにしていると思っていました。 [BackgroundWorker](https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx?ppud=4)の使用について話していますか?技術的な視点とは何が違うのですか?私は待っている/非同期ではできないことはできないのですか? – Andrew

+0

しかし、基本的に、 'Task 'を返すメソッドがありますが、あなたは 'T'を登録しています。 'Task 'を登録してください。 – Steven

答えて

2

AccountManagementView CreateAsync()

+0

私は '非同期'としてマークされていないメソッドで 'await'を使うことはできないと確信しています。 – Andrew

+0

タスク to AccountManagementView、非同期を維持します。 –

関連する問題