← All posts tagged .net

Решил использовать в прогрмме на WPF System.Windows.Threading.DispatcherTimer созданый специально для WPF для изменения текста в строке статуса через некоторое время после запуска. В Visual studio запускаю программу и окно программы не появляется на панели задач пока таймер не отработает. И так несколько раз подряд. Взял System.Timers.Timer в кфункцию обратного вызова которого надо запихать код вида
this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, (Action) (() => { Status.Text = System.String.Empty; (sender as System.Timers.Timer).Stop(); }));
(sender as System.Timers.Timer).Stop();
После включения компа на следующий день ешё раз попробовать с System.Windows.Threading.DispatcherTimer. Зработало как надо. Хрен знает почему.

В ублюдочном ЯваСценарии всего две функции для таймеров (setTimeout, setInterval) а в няшном .NET для правильных пацанов есть 5 разных способов:

• System.Threading.Timer
• System.Windows.Forms.Timer
• System.Timers.Timer
• System.Windows.Threading.DispatcherTimer
• System.Web.UI.Timer

В документации к System.Timers.Timer цела страница оговорок типа
The Timer component catches and suppresses all exceptions thrown by event handlers for the Elapsed event. This behavior is subject to change in future releases of the .NET Framework. Note, however, that this is not true of event handlers that execute asynchronously and include the await operator (in C#) or the Await operator (in Visual Basic). Exceptions thrown in these event handlers are propagated back to the calling thread, as the following example illustrates. For more information on exceptions thrown in asynchronous methods, see Exception Handling.

Я хуею. Один из возможных способов отправить HTTP запрос это написать код типа
HttpWebRequest r = WebRequest.Create(url) as HttpWebRequest;
r.Method = "POST";
r.ContentType = "application/json";
System.Byte[] jA = Encoding.UTF8.GetBytes(jsonStringToSend);

Stream rStream = r.GetRequestStream();
rStream.Write(jA, 0, j.Length);
HttpWebResponse re = r.GetResponse() as HttpWebResponse;

А где же происходит отправка запроса? А во время вызова GetResponse и происходит. Для сравнения код на Ruby:
uri = URI.parse("http://localhost:3000/users")

header = {'Content-Type': 'text/json'}
user = {user: {
name: 'Bob',
email: 'bob@example.com'
}
}

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri, header)
request.body = user.to_json

# Send the request
response = http.request(request)

Не могу получить данные с сайта по HTTPS из программки на .NET в Windows XP ({"Unable to read data from the transport connection: Удаленный хост принудительно разорвал существующее подключение."}). А вот в случае программы на Python такой проблемы нет. Сука–а!

В C# можно создать объект анонимного типа используя записав свйства в фигурных скобках (как в языке–который–нельзя–называть)

var o = new {name = "Ndndn", place = 12};
Но как потом обратиться к этим свойствам? Судя по подсказке IDE у объекта свойств таких нет. Оказывается всё просто (проще чем в языке–который–нельзя–называть):

item.GetType().GetProperty("label").GetValue(item, null)

Попробовал VB.NET. Лучше Python. Оперативки меньше потребляется, многословность не напрягает, Visual Studio очень помогает делая подсказки, конструкции вроде Double.TryParse(cPrice, Globalization.NumberStyles.Currency, Globalization.CultureInfo.CreateSpecificCulture("uk-UA"), currentPrice) добавляют уверенности. Но писать на .NET это грех и подвисающий переписанный с использованием .NET Daemon tools с неотзывчивым GUI последней версии что я пробовал тому доказательство.

Где этот ихний .NET используется? Кроме Paint.NET, игры Privates, какого-то текстового редактора и файлового менеджера больше не встречал явного прямого использвания. Privates, редактор и файловой менджер глючат, тормозят (особенно Privates). Есть подозрение что это такой удобный типа фреймворк. Прочитав статью о .NET сложилось впечетление что идея с .NET несколько провалилась.