在退出方法之前等待回调结果

时间:2016-11-02 07:53:53

标签: c# callback xamarin.ios xamarin.forms

我有以下代码可以在应用启动时检查有效的FingerPrint。我正在使用Xamarin.Forms。

PlatformSpecific(Xamarin.iOS)

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *strPath = [[NSBundle mainBundle] pathForResource:@"issues" ofType:@"csv"];
    NSString *strFile = [NSString stringWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
    if (!strFile) {
        NSLog(@"Error reading file.");
    }
    issues = [[NSArray alloc] init];
    issues = [strFile componentsSeparatedByString:@","];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return[issues count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *simpleTableIdentifier = @"SimpleTableCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    cell.textLabel.text = [issues objectAtIndex:indexPath.row];
    return cell;
}

基于public bool IsValidTouchID() { var replyHandler = new LAContextReplyHandler((success, er) => { if (success) { isSuccess = true; } else { isSuccess = false; } }); context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, "Enter Touch ID", replyHandler); return isSuccess; } 我必须导航到不同的页面。由于它是一个回调函数,它首先返回方法,然后调用replyHandler。因此总是返回replyHandler

我试过异步,等待但我无法实现它。

1 个答案:

答案 0 :(得分:2)

您可以使用TaskCompletionSource:

public Task<bool> IsValidTouchIDAsync()
{
    var tcs = new TaskCompletionSource<bool>();

    var replyHandler = new LAContextReplyHandler((success, er) => tcs.SetResult(success);

    context.EvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, "Enter Touch ID", replyHandler);

    return tcs.Task;
} 

请注意,该方法现在是异步的,因此调用者必须等待它。