Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 程序在未执行wait的情况下退出功能_C#_.net_Xamarin.forms - Fatal编程技术网

C# 程序在未执行wait的情况下退出功能

C# 程序在未执行wait的情况下退出功能,c#,.net,xamarin.forms,C#,.net,Xamarin.forms,我在我的程序中使用了两个wait函数,第一个可以完美地工作,但是当遇到第二个wait时,我的程序没有执行这个等待函数和之后的任何一行 不出错,甚至不崩溃 尝试了“等待()”、“在主线程上运行”、“任务运行”、“线程睡眠” 下面是一段代码 private async void Btn_Clicked(object sender, EventArgs e) { //this statement works perfectly fine var status = await

我在我的程序中使用了两个wait函数,第一个可以完美地工作,但是当遇到第二个wait时,我的程序没有执行这个等待函数和之后的任何一行

不出错,甚至不崩溃

尝试了“等待()”、“在主线程上运行”、“任务运行”、“线程睡眠”

下面是一段代码

  private async void Btn_Clicked(object sender, EventArgs e)
  {
     //this statement works perfectly fine
     var status = await CrossPermissions.Current.RequestPermissionAsync<LocationPermission>();
      
     //on debugging i found out it return out of function at this point without executing
      var check = await CrossPermissions.Current.RequestPermissionAsync<CameraPermission>();
      
      //None of the code is executed     
      Console.WriteLine("Granted");
      Console.WriteLine("Granted");
  }
private async void Btn\u已单击(对象发送方,事件参数e)
{
//这句话很好用
var status=await CrossPermissions.Current.RequestPermissionAsync();
//在调试时,我发现它在没有执行的情况下,此时返回功能
var check=wait CrossPermissions.Current.RequestPermissionAsync();
//没有执行任何代码
控制台。书面形式(“授权”);
控制台。书面形式(“授权”);
}

您尝试使用以下方法:

private async void Btn_Clicked(object sender, EventArgs e)
{
  await GetPermissions();
}

  public static async Task<bool> GetPermissions()
    {
        bool permissionsGranted = true;

        var permissionsStartList = new List<Permission>()
    {
        Permission.Location,
        Permission.Camera,
     
    };

        var permissionsNeededList = new List<Permission>();
        try
        {
            foreach (var permission in permissionsStartList)
            {
                var status = await CrossPermissions.Current.CheckPermissionStatusAsync(permission);
                if (status != Plugin.Permissions.Abstractions.PermissionStatus.Granted)
                {
                    permissionsNeededList.Add(permission);
                }
            }
        }
        catch (Exception ex)
        {
        }

        var results = await CrossPermissions.Current.RequestPermissionsAsync(permissionsNeededList.ToArray());

        try
        {
            foreach (var permission in permissionsNeededList)
            {
                var status = Plugin.Permissions.Abstractions.PermissionStatus.Unknown;
                //Best practice to always check that the key exists
                if (results.ContainsKey(permission))
                    status = results[permission];
                if (status == Plugin.Permissions.Abstractions.PermissionStatus.Granted || status == Plugin.Permissions.Abstractions.PermissionStatus.Unknown)
                {
                    permissionsGranted = true;
                }
                else
                {
                    permissionsGranted = false;
                    break;
                }
            }
        }
        catch (Exception ex)
        {
        }
        return permissionsGranted;
    }
private async void Btn\u已单击(对象发送方,事件参数e)
{
等待GetPermissions();
}
公共静态异步任务GetPermissions()
{
bool permissionsGranted=true;
var permissionsStartList=新列表()
{
许可,地点,
允许,摄像机,
};
var PermissionsNeedList=新列表();
尝试
{
foreach(permissionsStartList中的var权限)
{
var status=await CrossPermissions.Current.CheckPermissionStatusAsync(权限);
if(status!=Plugin.Permissions.Abstractions.PermissionStatus.grated)
{
PermissionsNeedList.Add(权限);
}
}
}
捕获(例外情况除外)
{
}
var results=await CrossPermissions.Current.RequestPermissionsAsync(permissionsNeedList.ToArray());
尝试
{
foreach(权限需求列表中的var权限)
{
var status=Plugin.Permissions.Abstractions.PermissionStatus.Unknown;
//始终检查密钥是否存在的最佳实践
if(结果。容器(许可))
状态=结果[权限];
if(状态==Plugin.Permissions.Abstractions.PermissionStatus.grated | |状态==Plugin.Permissions.Abstractions.PermissionStatus.Unknown)
{
permissionsGranted=真;
}
其他的
{
permissionsGranted=false;
打破
}
}
}
捕获(例外情况除外)
{
}
返回许可证;
}

可能是跨线程冲突。RequestPermission是否访问其他线程?我唯一一次“随机”跳过代码,它总是跨线程违反,在某些开发配置中不会引发异常。我想,但我不确定。如果这就是问题所在,那么解决方案可能是什么?您使用的是哪种技术?在winforms中,您可以使用Invoke来访问UI线程。我使用的是Xamarin表单,但我尝试在主线程中调用它,但没有成功。这是第二次等待。我试着切换订单,摄像机提示显示,但地点没有。同样,它也不会出现在Catch语句中。