Вы можете добавить прослушиватель событий в поле ввода в BotChat, чтобы отслеживать события keyup
и использовать нажатия клавиш, как бы вам ни хотелось, прежде чем пользователь отправит сообщение. Смотрите пример кода ниже.
const input = document.getElementsByClassName('wc-shellinput')[0];
input.addEventListener('keyup', event => {
if (event.key != 'Enter') {
console.log('Key:', event.key);
console.log('Value:', event.target.value);
}
});
Надеюсь, это поможет.
При открытии файла для чтения в.NET, это в какой-то момент попытается создать дескриптор файла с помощью API-функции CreateFile, которая устанавливает код ошибки, который может использоваться для наблюдения, почему это перестало работать:
const int ERROR_SHARING_VIOLATION = 32;
try
{
using (var stream = new FileStream("test.dat", FileMode.Open, FileAccess.Read, FileShare.Read))
{
}
}
catch (IOException ex)
{
if (Marshal.GetLastWin32Error() == ERROR_SHARING_VIOLATION)
{
Console.WriteLine("The process cannot access the file because it is being used by another process.");
}
}
Существует полезное обсуждение групп Google, которые действительно необходимо считать. Одна из опций близко к darin's; однако, для гарантии Вы получаете право win32 ошибка, действительно необходимо назвать win32 OpenFile () API сами (иначе, Вы действительно не знаете, какую ошибку Вы получаете).
Другой должен проанализировать сообщение об ошибке: это перестанет работать, если Ваше приложение будет запущено на другой языковой версии.
Третья опция состоит в том, чтобы взломать в классе исключений с отражением для извлечения фактического HRESULT.
Ни одна из альтернатив не действительно настолько привлекательна: иерархия IOException извлекла бы выгоду еще из нескольких подклассов, по моему скромному мнению.
Для чтения данных, можно сделать:
с помощью (фс FileStream = новый FileStream (имя файла, FileMode. Открытый, FileAccess. Читайте, FileShare. ReadWrite | FileShare. Удалите)) {....}
и сохранить в файл:
с помощью (фс FileStream = новый FileStream (имя файла, FileMode. Добавьте, FileAccess. Запись, FileShare. Читайте | FileShare. Удалите)) {...}
Флаги в конце конструкторов описывают то, что другой процесс может сделать с файлом. Хорошо, конечно, если Вы управляете и записью и читаете...
Можно открыться, это (как описано bezieur) затем пытается заблокировать разделы (или целый файл): http://www.java2s.com/Code/VB/File-Directory/Lockandunlockafile.htm
Вы подразумеваете, что и читаете и пишете в файл? Или что внешнее приложение пишет в него.
При выполнении чтения и записи затем, что я предполагаю, что Вы делаете, это на различных потоках, в этом случае смотрит на класс ReaderWriteLock, который сделает это управление для Вас, и позволять Вам обеспечивать тайм-ауты.
http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx
Иначе все, что необходимо сделать, открыть файл в режиме только для чтения. Затем у Вас не должно быть проблем:
fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read));
Можно сравнить с типом IOException, чтобы проверить и видеть, не является ли это что-то еще
Такой как
if (ex is FileNotFoundException)
Вы могли бы хотеть искать справку в Системе. IO. Много исключений в том классе наследовалось IOException. За пределами проверки, чтобы видеть, является ли это другой тип исключения, Вам, вероятно, придется посмотреть в сообщении описания, или Вы могли бы изучить превращение вызова API Win32 в shell32.dll. Может быть функция там, чтобы проверить, заблокирован ли файл.
Кроме того, если абсолютно необходимо ожидать, можно использовать цикл, но если Вы хотите сделать другие действия при ожидании использования асинхронный поток.