小编Iva*_*ART的帖子

如何使用ContinueWith正确管理任务中的异常

在阅读有关任务和exepcion管理的信息后,我使用此代码来管理任务中抛出的异常:

Task<Object> myTask = Task.Factory.StartNew<Object>(doTask, CancellationToken.None,   TaskCreationOptions.None, TaskScheduler.Default);
myTask .ContinueWith(task => afterTask(task), TaskScheduler.FromCurrentSynchronizationContext());
Run Code Online (Sandbox Code Playgroud)

doTask和AfterTask在哪里:

private <Object> doTask() {
    throw new Exception("BOOM");
}

private afterTask(Task<Object> aTask) {

        if (aTask.IsFaulted)
        {
            MessageBox.Show(aTask.Exception.InnerException.Message);
        }
        else //whatever
}
Run Code Online (Sandbox Code Playgroud)

抛出Exception Boom时,Visual Studio会显示一条警告,通知未捕获异常但如果我继续执行异常则在afterTask函数中处理.

这段代码是正确的还是我错过了解任务的一些基本行为?有什么办法可以避免调试器发出没有捕获到execption的警告?有点烦人......

提前致谢

c# multithreading exception task faulted

8
推荐指数
1
解决办法
1万
查看次数

以编程方式在Android中禁用并启用方向更改

我有一个应用程序,使一些背景人员.当后台工作正在运行时,会显示圆圈,如果在此期间旋转设备,则活动将"重置",我想避免这种情况.

出于这个原因,我决定在此过程中禁用方向.我已经看到了这个问题的差异线程,但没有一个有效的解决方案,至少在我的情况下.

发布的解决方案是关于修复活动方向,但您必须处理以下事实:如果您使用以下情况,则不会返回REVERSE方向:

getResources().getConfiguration().orientation
Run Code Online (Sandbox Code Playgroud)

对于PORTRAIT和REVERSE_PORTRAIT情况,上面的函数都返回SCREEN_ORIENTATION_PORTRAIT(至少在我的测试中).

所以最后我用Rotation值来处理它,所以我的代码"禁用旋转"是:

int rotation = getWindowManager().getDefaultDisplay().getRotation();

    switch(rotation) {
    case Surface.ROTATION_180:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
        break;
    case Surface.ROTATION_270:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);         
        break;
    case  Surface.ROTATION_0:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        break;
    case Surface.ROTATION_90:
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        break;
    }
Run Code Online (Sandbox Code Playgroud)

并再次允许方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
Run Code Online (Sandbox Code Playgroud)

这在使用Android 4.1.2的设备中完美运行,但在使用Android 4.2.1的设备中,它无法按预期工作.

我想在活动实时循环中管理轮换应该是一个常见问题,但我无法找到合适的解决方案.可能是我正在寻找错误的方向,所以任何帮助都是非常受欢迎的.

提前谢谢,伊万.

android rotation screen-orientation android-orientation android-activity

8
推荐指数
2
解决办法
2万
查看次数