\0がそのまま変換されてしまうので、それの対処方法。
byte[] byteArray = { 0x41, 0x42, 0x43, 0 }; // "ABC\0"
string msg = Encoding.ASCII.GetString(byteArray);
msg = msg.TrimEnd('\0'); // ※これが必要
MessageBox.Show(msg + msg);
P/InvokeでDLLから文字列を取得するとNULL終端文字列となっていたりします。これをStringに変換するとNULL文字がそのまま変換されて具合が悪いことがあります。例えば上記コードでTrimEnd行がないとmsg+msgが”ABC\0ABC\0″となってしまい、ダイアログボックスに”ABC”と表示されてしまいます。そんなときはTrimEndメソッドで末尾の\0を取りましょう。