Прежде всего, вы можете использовать await Task.Delay(10)
вместо Thread.Sleep(10)
и изменить свой метод AsyncTicToc
на async Task
без запуска потока. Это сделает изменение элемента управления в потоке пользовательского интерфейса (контекст, от которого вы ожидали).
Во-вторых, чтобы обновить пользовательский интерфейс из других потоков, если вы не хотите использовать диспетчер напрямую, вы можете использовать абстракцию над ним: класс SynchronizationContext . См. Больше информации здесь .
Пример: SynchronizationContext.Current.Post(action, actionParameter);
В-третьих, более уместно использовать модель представления и привязку. Если вы используете WPF, он синхронизирует потоки для изменений свойств для вас.
Если Вы не знаете набора символов наверняка, можно только предположить в основном. utf8:: допустимый мог бы помочь Вам с этим, но Вы не можете действительно знать наверняка. Если Вы знаете, что, если это не unicode, это должен быть определенный набор символов (Как латинский 1), Вы удачный. Если Вы понятия не имеете, Вы завинчены. В любом случае необходимо всегда предполагать, что целый файл находится в том же наборе символов, если иначе не указано. Вы потеряете свою исправность, если Вы не сделаете.
Что касается Вашего вопроса, как преобразовать между наборами символов: Закодируйте там, чтобы сделать это для Вас
Определение, является ли файл, вероятно, UTF-8 или не должен быть довольно легким. Определение кодирования, если бы это не UTF-8, было бы очень трудным в целом.
Если файл кодируется UTF-8, высокие биты каждого байта должны следовать за шаблоном. Если символ составит один байт, то его высокий бит будет очищен (обнуляют). Иначе, n
символ байта (где n 2–4) будет иметь верхний уровень n
биты первого набора байта одному, сопровождаемому единственным нулевым битом. Следующее n - 1
байты должны все иметь самый высокий набор битов и второй по высоте очищенный бит.
Если все байты в Вашем файле следуют этим правилам, он, вероятно, кодируется UTF-8. Я говорю, вероятно, потому что любой может изобрести новое кодирование, которое, оказывается, следует тем же правилам, сознательно или случайно, но интерпретирует коды по-другому.
Обратите внимание, что файл, закодированный US-ASCII, будет следовать этим правилам, но высокий бит каждого байта является нулем. Это должно хорошо рассматривать такой файл как UTF-8, так как они совместимы в этом диапазоне. Иначе это - некоторое другое кодирование, и нет свойственного теста для различения кодирования. Необходимо будет использовать некоторое контекстное знание для предположения.