Отсутствуют функции .NET в приложении в стиле Metro?

В основном из любопытства я начал программировать небольшой проект «Metro Style» в Visual Studio 2011, который был выпущен в Windows Developer Preview. Он сочетает в себе XAML для дизайна и C# (в моем проекте) для кода программной части.

Работа с C# в основном идентична той, которую вы получаете в Visual Studio 2008 с .NET framework 4.0, за исключением следующих функций, которые мне не удалось найти:

  • System.Console, что немного усложняет отладку,
  • И System.Threading.Thread.Sleep(TimeSpan), что немного неудобнее, поскольку это именно то, что мне было нужно прямо сейчас.

Так эти функции на самом деле отсутствуют/отключены, или я просто искал не в том месте? Заранее спасибо.


person Timst    schedule 16.09.2011    source источник


Ответы (4)


У меня не установлен Preview, поэтому я не могу проверить. Но вот две мысли:

  1. System.Console, вероятно, недоступен, потому что нет консоли в приложениях в стиле Metro. Проверьте, доступен ли Debug.WriteLine. Он записывает непосредственно в окно отладки в Visual Studio.

  2. Приложения в стиле Metro не должны блокировать потоки на длительное время. Все, что занимает больше нескольких миллисекунд, должно выполняться асинхронно. Найдите способ выполнить асинхронный обратный вызов через некоторое время, например, таймер. Или вы можете await указать конец промежутка времени (например, TaskEx.Delay в асинхронной CTP).

person dtb    schedule 16.09.2011
comment
Все содержимое TaskEx теперь перемещено в Task, так что await Task.Delay(ms) должно помочь. - person Pavel Minaev; 17.09.2011

Для «отладки printf» я предлагаю вам использовать методы Debug.WriteLine и/или Trace.WriteLine из пространства имен System.Diagnostics. Они печатаются в окне вывода отладчика — в VS Express, который входит в предварительную версию для разработчиков, вам нужно сначала включить это (Отладка -> Windows -> Вывод).

Что касается Thread.Sleep, можете ли вы уточнить конкретный сценарий, для которого, по вашему мнению, это необходимо?

person Pavel Minaev    schedule 16.09.2011
comment
Спасибо, Debug.Write сработал. Что касается Thread.Sleep, мне нужно было быстро создать прототип цикла, но Task.Delay, предложенный ответом выше, прекрасно заполнил пробел. - person Timst; 17.09.2011
comment
Отличное решение — это эквивалент Trace.WriteLine() в WPF в пространстве имен System.Diagnostics. - person Shawn J. Molloy; 24.11.2013

http://dougseven.com/2011/09/15/a-bad-picture-is-worth-a-thousand-long-discussions/

Насколько я понимаю, это просто подмножество; большая часть того, что отсутствует, относится к синхронным операциям (поэтому я не удивлен, что Thread.Sleep() исчез). Вы также обнаружите, что такие вещи, как File.Create, нельзя вызывать синхронно.

person Rob P.    schedule 16.09.2011

Thread.Sleep() нет, но можно использовать Task.Delay(milliseconds);

Для тех, кому интересно, для чего это полезно, я скажу, что использую его в отладке, чтобы подчеркнуть асинхронное поведение.

person Antonio Zerbinati    schedule 11.08.2012