Что делать, если мне нужен одноразовый элемент для всего запуска моего приложения? Есть некоторые случаи, когда это кажется необходимым, например, если я хочу синхронизировать 2 потока с: System.Collections.Concurrent.BlockingCollection.Что делать, если мне нужен одноразовый элемент?
Если один из потоков использует использование и распоряжается им, а другой Thread не смог завершить работу или ждать на BlockingCollection (вы можете установить тайм-аут), он затем получит Disposed Exception.
И, вероятно, есть больше случаев, когда это правда, так есть способ обойти это, или я должен просто сделать объект инициализацией и избавиться от него при закрытии?
EDIT: Вот что рассказывает Visual Studio, когда я использую одноразовый элемент.
Во-первых, как я использую его в качестве примера:
private void Initialize()
{
Queue = new System.Collections.Concurrent.BlockingCollection<byte[]>();
Queue.Dispose();
}
И я получаю это:
warning : CA2213 : Microsoft.Usage : 'Capture' contains field 'Capture.Queue' that is of IDisposable type: 'BlockingCollection<byte[]>'. Change the Dispose method on 'Capture' to call Dispose or Close on this field.
Так что просто get's меня путают. Я сказал это, чтобы избавиться сразу после это было сделано, и он все еще хочет, чтобы я, чтобы избавиться от него: S
EDIT 2:
Является ли это правильный способ утилизации объекта, которые должны быть в живых запущено все приложение?
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
Queue.Dispose();
}
base.Dispose(disposing);
}
Как вы можете видеть, я добавил туда очередь.
Это не кажется правильным, хотя, кажется странным работать с файлом Designer.cs и добавлять материал по компонентам. Dispose();
Но, надеюсь, это правильно.
Не используйте использование на объекте и инициализируйте его при запуске программы, а утилита при закрытии программы. Проблема, которую вы не можете гарантировать кому-то другому, не будет использовать 'использование' на объекте? – crush
Проблема в том, должен ли я это сделать? Visual Studio ненавидит, когда я не использую «Использование», он говорит (вам нужно распоряжаться одноразовыми объектами), даже если я скажу ему, чтобы он удалял объект в Close. Так что это просто меня смущает – Zerowalker
Почему вы его немедленно уничтожаете в блоке 'Initialize()'? Это просто проверить тестовые сообщения в VS? – crush