首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Clipboard.ContainsImage()可靠还是有用?

Clipboard.ContainsImage()可靠还是有用?
EN

Stack Overflow用户
提问于 2019-03-28 15:34:18
回答 1查看 384关注 0票数 5

Microsoft的Clipboard.ContainsImage()文档中提供的示例包括以下内容:

代码语言:javascript
运行
复制
System.Drawing.Image returnImage = null;
if (Clipboard.ContainsImage())
{
    returnImage = Clipboard.GetImage();
    ....
}

该方法的表面/名义行为是首先检查剪贴板是否包含图像,如果包含图像,则获取该图像以供使用。否则返回null

但是,在调用ContainsImage()和调用GetImage()之间,难道不是另一个应用程序改变了剪贴板的内容吗?毕竟可能没有图像数据。

当剪贴板不包含图像时,GetImage() 已记录在案返回null。好吧,但是首先调用ContainsImage()有什么意义,如果您调用GetImage()时,无论如何都必须检查结果?

这不仅适用于这个示例--如果您实际需要剪贴板内容,调用ContainsImage() 的用途是什么?

也许..。

  • 它比调用GetImage()更有表现力,因此它值得这样做,即使在一小部分情况下GetImage()会失败?
  • 一些神奇的锁定正在进行,它自动解决了这个问题(非常可疑)?

如果您不需要获取剪贴板的内容,只为了查看它们是否是图像,那么ContainsImage()可能是有用的。

EN

回答 1

Stack Overflow用户

发布于 2019-03-28 18:22:55

假设您有一个按钮,并且希望每当剪贴板中有图像时就启用它,否则就禁用它。

定期调用ContainsImage()并没有太大的成本,因为它是一个标志,在将图像设置为剪贴板时只设置一次)。但是每次获取图像本身只是为了确保剪贴板中有一个图像是昂贵的。

另一个例子是:

假设您有可以包含视频、图像或音频的byte[]

代码语言:javascript
运行
复制
public enum MediaType
{
    Audio,
    Video,
    Image,
    None
}

class MyData
{
     private byte mydata = null;
     private MediaType type = MediaType.None;
     public void SetData(byte[] data)
     {
          mydata = data;
          if(ImageValidation())  // a method that validates data is a valid image
              type = MediaType.Image;
          else if(VideoValidation())
              type = MediaType.Video;
          else if(AutioValidation())
              type = MediaType.Audio;
          else
              type = MediaType.None;
     }

     //I'm not going to create all get functions but just for one type

     public bool ContainsImage()   //costless
     {
          return type == MediaType.Image;
     }

     public Image GetImage()  //costly if there is an image
     {
          if(type == MediaType.Image)
              using (var ms = new MemoryStream(mydata))
              {
                   return Image.FromStream(ms);    
              }
          else
              return null;
     }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55401512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档