Я хочу проверить все мои файлы приложений c # при запуске, если они существуют или нет.этот код сделает это:
if (!File.Exists("MyControls.dll")
{
return false;
}
IS File.Exists IO?будет ли он зависает основной поток (пользовательский интерфейс)?File.ExistsAsync не существует.Как я могу проверить доступность файла Async?
Я пробовал некоторые другие способы, но все они зависают приложение, когда файл не существует из-за FileNotFoundException
Это другой пример кода, я создал кучу пустыхTXT-файлы для теста:
private static async Task<bool> ReadAsync(Encoding encoding)
{
bool x = true;
for (int i = 1; i < 25729; i++)
{
string filename = " (" + i.ToString() + ").txt";
try
{
char[] result;
// File.OpenText : if file not exist a FileNotFoundException will
// accur and it will freeze UI
using (StreamReader reader = File.OpenText(filename))
{
result = new char[reader.BaseStream.Length];
await reader.ReadAsync(result, 0, (int)reader.BaseStream.Length);
}
}
catch (Exception ex)
{
x = false;
}
}
return x;
}
Замораживает пользовательский интерфейс, когда файлы не существуют, но когда они существуют, он замедляет пользовательский интерфейс не полностью замораживается.
Является ли этот подход правильным для проверки доступности файлане можете ли вы помочь мне, как я это делаю?
Обновление 1:
У меня есть эта функция:
private bool ISNeededFilesAvailable()
{
if(!File.Exist("MyCustomeControls.dll"))
return false
if(!File.Exist("PARSGREEN.dll"))
return false
.
.
.
return true
}
Я не уверен, где и когда использовать этот метод!но я использовал его в событии Loaded окна с именем startupWindow, и я вызываю showdialog () перед открытием mainwindow:
private void StartupWindow_Loaded(object sender, RoutedEventArgs e)
{
if (!ISNeededFilesAvailable())
Application.close();
else
this.close();
}
public MainWindow()
{
StartupWindow sw = new StartupWindow ()
sw.showdialog();
InitializeComponent();
}