Пожалуйста, прочитайте ответ Скоттом Чемберленом, чтобы узнать, почему это связано с WINAPI.
Создайте новое приложение WPF в Visual Studio и измените код в MainWindow.xaml.cs
, как показано ниже. Запустите приложение. Код будет входить во второй вызов Console.Write()
.
MainWindow.xaml.cs
using System;
using System.Text;
using System.Windows;
namespace TestWpf
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
byte[] msg = new byte[1024];
string msgStr = Encoding.Default.GetString(msg);
for (int i = 0; i < 10; i++)
{
Console.Write(msgStr);
}
}
}
}
Теперь создайте новое консольное приложение в Visual Studio и измените код в Program.cs
, как показано ниже. Запустите приложение. Он будет работать успешно, то есть он не будет висеть.
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
byte[] msg = new byte[1024];
string msgStr = Encoding.Default.GetString(msg);
for (int i = 0; i < 100; i++)
{
Console.Write(msgStr);
}
}
}
}
Вопросы:
- Почему второй вызов Console.Write() зависает в приложении WPF?
- Почему поведение в консольном приложении отличается?
- Почему это происходит, только если строка является строкой
\0
? (Он отлично работает, если вы используете 1024 пробела.)