wpf 带参数传递任务< bool>并执行[duplicate]

uyhoqukh  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(174)

此问题在此处已有答案

(13个答案)
4天前关闭。
我把Task传递给类库,在类库中它需要被执行,但是参数值只能在类库本身中获得,我不知道还能怎么解释,也许这个例子更清楚:
1.)需要从库运行的任务:

public async Task<bool> Login(string _password)
 {
    //...
 }

2.)将此任务传递给类库(使用string.Empty,因为参数将在类库中获得它的真实的值)

var _check = _myLibrary.ShowLogin(() => _myMethods.Login(string.Empty));

3.)从类库执行任务,但使用真实的参数值。

public partial class LoginWindow : Window
 {

   public ShowLogin(Func<Task<bool>> _checkpassword)
   {
     CheckPassword = _checkpassword;
   }

   public Func<Task<bool>> CheckPassword{ get; set; }

   public MessageBoxResult Result { get; set; }

   private async void Btn_login_Click(object sender, RoutedEventArgs e)
   {
     var _check = await CheckPassword(Txt_password.Text); // ERROR HERE!

     if (!_check)
     {
       Result = MessageBoxResult.Cancel;
     }
     else
     {
       Result = MessageBoxResult.OK;
     }
           
     Close();
   }
}

类库保存了我在WPF中显示的自定义窗口的集合。在这个特定的窗口中,用户必须输入密码才能登录。如果密码正确,用户可以进入应用程序,否则就不能。这就是全部。

如何使用库中的参数调用传递的Task**?**

编辑:错误为“'委托函数'不接受1个参数”。

wmvff8tz

wmvff8tz1#

Func<Task<bool>>是**Task<bool> Login()**,因为你可以传递一个你需要定义Func<string, Task<bool>>的参数。

var _check = _myLibrary.ShowLogin(_myMethods.Login);
var _checkAlternative = _myLibrary.ShowLogin((string pwd)=>_myMethods.Login(pwd));

public partial class LoginWindow : Window
{
   public ShowLogin(Func<string, Task<bool>> _checkpassword)
   {
      CheckPassword = _checkpassword;
   }

   public Func<string, Task<bool>> CheckPassword{ get; set; }

   public MessageBoxResult Result { get; set; }

   private async void Btn_login_Click(object sender, RoutedEventArgs e)
   {
      var _check = await CheckPassword(Txt_password.Text); // NO ERROR HERE!
      ...
   }
}

相关问题