Да, простого способа открыть файл мультимедиа и получить его продолжительность не существует, причина в том, что файл открывается в фоновом режиме (для поддержки файлов, которые открываются долго, например, файлы на удаленных серверах). ), поэтому сразу после вызова Open файл еще не был открыт.
Лучшим вариантом является реструктуризация кода, чтобы вы открывали файл, не возвращая длительность, а затем ожидали события MediaOpened / MediaFailed.
Если вам абсолютно необходимо открыть файл и вернуть время, в течение которого вы столкнулись с какими-либо проблемами, просто попытайтесь избежать Thread.Sleep, поскольку он заблокирует ваш пользовательский интерфейс и помнит, что пользователь может продолжать взаимодействовать с графическим интерфейсом, пока вы ждете файл, который можно открыть, потенциально открывая другой файл во время ожидания.