2017-12-11 5 views
0

バックグラウンドワーカーの使用例を教えてください。 私はbackground workerを作成しました。asp.netボイラープレートのドキュメントに記載されている指示に従ってください。私のクラスを継承するBackgroundWorkerの例

public class ContactValidationBackgroundWorker : BackgroundWorkerBase, ITransientDependency 

非表示のTask.Run(MyMethod)メソッドをオーバーライドします。次に、WaitToStopオーバーライドメソッドにwait命令を追加し、myTask.Wait()のように追加します。

このメソッドは起動しますが、メインの処理プロセスをブロックします。 私はAsp.net(ボイラープレート)コア+角度(SPA)を使用しています 私はそれをアプリケーションサービス層に追加しました。

+0

はAlperEbicogluの[解答](https://stackoverflow.com/questions/47747926/backgroundworker-example#47772296)@を参照してください。 – aaron

答えて

0
public partial class MainWindow : Window 
{ 
    //defining the backgroundworker 
    private BackgroundWorker bgworker = new BackgroundWorker(); 

    public MainWindow() 
    { 
     InitializeComponent(); 
     initializeBackgroundWorker(); 
    } 

    private void initializeBackgroundWorker() 
    { 
     bgworker.DoWork += MyBackgroundWorker_DoWork; 
    } 

    private void MyBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     //method you want to execute in the backgroundWorker 
     MyMethod(); 
    } 

    private void Mouse_Enter(object sender, MouseEventArgs e) 
    { 
     //call the backgroundWorker and execute it 
     //This will execute the method simultaneouly with other methods 
     //without blocking the UI 

     bgworker.RunWorkerAsync(); 
    } 

    private void MyMethod() 
    { 
     //your method's code 
    } 

} 

上記のコードはC#を使用してWPFまたはWinフォームアプリケーションにbackgroundWorkerdefine, initialize and executeする方法を示しています。 コードの各部分の意味を理解するために、コードのインラインコメントを参照してください。

+0

いいえ、aspnetvoilerplateとnet core 2に従ったバックグラウンドワーカーの例が必要です。これは私が理解するようにスイートではありません。 – grinay

0
public class MakeInactiveUsersPassiveWorker : PeriodicBackgroundWorkerBase, ISingletonDependency 
{ 
    private readonly IRepository<User, long> _userRepository; 

    public MakeInactiveUsersPassiveWorker(AbpTimer timer, IRepository<User, long> userRepository) 
     : base(timer) 
    { 
     _userRepository = userRepository; 
     Timer.Period = 5000; //5 seconds (good for tests, but normally will be more) 
    } 

    [UnitOfWork] 
    protected override void DoWork() 
    { 
     using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant)) 
     { 
      var oneMonthAgo = Clock.Now.Subtract(TimeSpan.FromDays(30)); 

      var inactiveUsers = _userRepository.GetAllList(u => 
       u.IsActive && 
       ((u.LastLoginTime < oneMonthAgo && u.LastLoginTime != null) || (u.CreationTime < oneMonthAgo && u.LastLoginTime == null)) 
       ); 

      foreach (var inactiveUser in inactiveUsers) 
      { 
       inactiveUser.IsActive = false; 
       Logger.Info(inactiveUser + " made passive since he/she did not login in last 30 days."); 
      } 

      CurrentUnitOfWork.SaveChanges(); 
     } 
    } 
} 

読む=>https://aspnetboilerplate.com/Pages/Documents/Background-Jobs-And-Workers