Я не думаю, что Uri.EscapeDataString () для всего URL является правильным методом для использования здесь. См. Например:
string uriString =
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test query";
string escapedDataString = Uri.EscapeDataString(uriString);
"https%3A%2F%2Fwww.google.com%2Fsearch%3Fgcx%3Dw%26sourceid%3Dchrome%26ie%3DUTF-8%26q%3Dtest%20query"
string escapedUriString = Uri.EscapeUriString(uriString);
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test%20query"
Кажется, что EscapeDataString полностью разрушает URL, экранируя все, включая префикс "https://"", в то время как EscapeUriString просто экранирует то, что необходимо экранировать.
В соответствии с документацией вы должны "использовать метод EscapeUriString, чтобы подготовить неэкранированную строку URI в качестве параметра для конструктора Uri.".
Лично - я всегда избегал только параметров Uri, которые я строил, поэтому, например, если значение параметра включало амперсанд - я мог бы принудительно избежать его вместо того, чтобы полагаться на EscapeUriString, чтобы знать все.
Очевидно, что "https% 3A% 2F% 2Fwww.google.com% 2Fsearch% 3Fgcx% 3Dw% 26sourceid% 3Dchrome% 26ie% 3DUTF-8% 26q% 3Dtest% 20query" не является допустимым URL-адресом.
* EDIT
Должно быть, я упустил, что в WP7.0 только свойство строкового URL-адреса устарело в WP7.1, и это свойство действительно требует экранирования всего URL-адреса с помощью EscapeDataString. Я попробовал это в обоих типах проектов - нацеливание на 7.0 и 7.1 и не заметил никакого зависания. Единственное отличие заключалось в том, что 7.0 всегда будет мешать моему приложению, а 7.1 - нет. Возможно, в вашем приложении есть какой-то другой код, который блокирует, когда вы возвращаетесь из-за захоронения. Вот мой код:
string uriString =
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test query";
string escapedDataString = Uri.EscapeDataString(uriString);
var wbt = new WebBrowserTask();
wbt.URL = escapedDataString;
wbt.Show();
Другая идея - дважды избегать строки uri - сначала используйте вызов EscapeUriString для всего адреса или вызовите EscapeDataString только для параметров при построении строки, а затем снова экранируйте весь полученный uri, используя EscapeDataString.