mediaSelector.AddMediaItemFromFilePath(new[] { "Resources/re.gif" });
+ var mediaItems = mediaSelector.MediaItems.ToArray();
var thumbnailImages = mediaSelector.ThumbnailList.ToArray(); // 表示中の画像
mediaSelector.ClearMediaItems();
+ Assert.True(mediaItems.All(x => x.IsDisposed));
Assert.True(thumbnailImages.All(x => x.IsDisposed));
}
namespace OpenTween
{
- public interface IMediaItem
+ public interface IMediaItem : IDisposable
{
/// <summary>
/// メディアのID
Guid Id { get; }
/// <summary>
+ /// メディアが既に破棄されているかを示す真偽値
+ /// </summary>
+ bool IsDisposed { get; }
+
+ /// <summary>
/// メディアへの絶対パス
/// </summary>
string Path { get; }
public Guid Id { get; } = Guid.NewGuid();
+ public bool IsDisposed { get; private set; } = false;
+
public string Path
=> this.FileInfo.FullName;
using var fs = this.FileInfo.OpenRead();
fs.CopyTo(stream);
}
+
+ public void Dispose()
+ {
+ if (this.IsDisposed)
+ return;
+
+ this.IsDisposed = true;
+ }
}
/// <summary>
/// <remarks>
/// 用途の関係上、メモリ使用量が大きくなるため、不要になればできるだけ破棄すること
/// </remarks>
- public class MemoryImageMediaItem : IMediaItem, IDisposable
+ public class MemoryImageMediaItem : IMediaItem
{
public const string PathPrefix = "<>MemoryImage://";
private static int fileNumber = 0;
this.MediaItems.Clear();
foreach (var mediaItem in mediaItems)
- this.DisposeMediaItem(mediaItem);
+ mediaItem.Dispose();
var thumbnailImages = this.ThumbnailList.ToList();
this.ThumbnailList.Clear();
}
}
- private void DisposeMediaItem(IMediaItem? item)
- {
- var disposableItem = item as IDisposable;
- disposableItem?.Dispose();
- }
-
public void SetSelectedMediaAltText(string altText)
{
var selectedMedia = this.SelectedMediaItem;