小编Abd*_*eem的帖子

返回由Image.FromStream(Stream stream)方法创建的图像

我有这个函数在函数中返回一个Image,使用Image.FromStream方法创建图像根据MSDN:

您必须在图像的生命周期内保持流打开

所以我没有关闭流(如果我关闭了蒸汽,则从返回的图像对象中抛出GDI +异常).我的问题是当在返回的Image上的其他地方调用Image.Dispose()时是否关闭/处理

public static Image GetImage(byte[] buffer, int offset, int count)
{
    var memoryStream = new MemoryStream(buffer, offset, count);
    return Image.FromStream(memoryStream);
}
Run Code Online (Sandbox Code Playgroud)

正如其中一个答案中所建议的,使用不是要走的路,因为它会引发异常:

public static Image GetImage(byte[] buffer, int offset, int count)
{
    using(var memoryStream = new MemoryStream(buffer, offset, count))
    {
         return Image.FromStream(memoryStream);
    }
}

public static void Main()
{
   var image = GetImage(args);
   image.Save(path); <-- Throws exception
}
Run Code Online (Sandbox Code Playgroud)
  1. 按照一些人的明确处置/关闭一个MemoryStream的,因为它不使用任何非托管资源,也有人说,相反的事情,所以它的那种进退两难的是没有必要的.
  2. Image.Dispose方法不会处理创建Image的流ftom
  3. Image类不保存对传递给Image.FromStream …

c# dispose image stream

11
推荐指数
2
解决办法
6221
查看次数

管理片段事务,您不希望丢失某些片段的数据

我有5个片段,其中两个是列表片段,包含一些数据(昂贵的加载),其余的没有任何重要的.

我的目标是如何管理事务,以便只有一个List片段保留在内存中(始终),当我按下它时,它应该恢复到列表片段.这是一些部分代码,用于处理片段的on,但问题是当我按下它时不会卸载当前片段而是加载Main Fragment而不删除当前片段.

WorkFlow:主片段(任务片段)在开始后加载任何片段都可以加载.如果主要片段是当前的并且选择了组片段,则删除主片段,否则如果选择任何其他片段则保留(隐藏)主片段并加载新片段

注意:它与导航抽屉一起使用,其中1个片段在开始时加载

public class FragmentController {

    private static final String TAG_MAIN = "main"; //Expensive
    private static final String TAG_GROUP = "group"; //Expensive
    private static final String TAG_PROFILE = "profile"; //Cheap
    private static final String TAG_CREATE_TASK = "create_task"; //Cheap
    private static final String TAG_CREATE_GROUP = "create_group";//Cheap
    private static final String TAG_SETTINGS = "settings"; //Cheap

    private android.support.v4.app.FragmentManager fragmentManager;


    @IdRes private int container;

    public FragmentController(android.support.v4.app.FragmentManager fragmentManager, @IdRes int container) {
        this.fragmentManager = fragmentManager;
        this.container = container;
    }

    public void showMainFragment() …
Run Code Online (Sandbox Code Playgroud)

android android-fragments

5
推荐指数
1
解决办法
537
查看次数

包装函数的返回值是一个好主意吗?

将函数的返回值包装在类中是一个好主意.它提供了编码的简易性,你可以避免尝试...抓住我正在做这样的事情.

public class ResultWrapper
{
    public bool Success{get;set;}
    public Exception ErrorMessage{get;set;}
    public object Result{get;set;} //not object essentially(any type) 

    public Result()
    {
            Success=false;
            ErrorMessage="";
            Result=null;
    }
}

public ResultWrapper DoSomething(parameters....)
{
    var result=new ResultWrapper()
    try
    {

    }
    catch(Exception ex)
    {
        result.Error=ex;
    }
    return result;

}
Run Code Online (Sandbox Code Playgroud)

然后称之为

static void main()
{
    var result=DoSomething(parameters...);
    if(result.Success)
    {
        //Carry on with result.Result;
    }
    else
    {
        //Log the exception or whatever... result.Error
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

考虑一下

static void main()
{
    var result=Login(); //throws an exception
    if(result.Success) …
Run Code Online (Sandbox Code Playgroud)

.net c# function

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

标签 统计

c# ×2

.net ×1

android ×1

android-fragments ×1

dispose ×1

function ×1

image ×1

stream ×1