2015-09-10 2 views
-2

Я пытаюсь прочитать некоторые данные с сервера для встроенной функции обновления, и я получаю ошибку времени компиляции. Есть ли способ обойти это? Мне нужно это, чтобы проверить, имеет ли пользователь рабочее интернет-соединение, и если не пропустить проверку обновлений. (Если не существуют более надежные способы в .Net 4.5)поток не существует в текущем контексте, используя try

WebClient client = new WebClient(); 
try 
{ 
    Stream stream = client.OpenRead("http://repo.itechy21.com/updatematerial.txt"); 
} 
catch (Exception ex) 
{ MessageBox.Show(ex.Message); } 

StreamReader reader = new StreamReader(stream); // <-- error here 
String content = reader.ReadLine(); 

Ошибка:

stream does not exist in the current context

+0

[Как использовать downvotes] (http://stackoverflow.com/help/privileges/vote-down) Не могли бы вы заинтересоваться? – iTechy

+0

iTechy, эта тема [Когда справедливо для downvote] (http://meta.stackoverflow.com/questions/252677/when-is-it-justifiable-to-downvote-a-question) идет более подробно, наряду с обсуждениями требовать комментариев по downvotes - http://meta.stackoverflow.com/questions/250177/require-a-comment-explaining-the-reason-for-the-first-downvote-on-a-question. TL; DR - не показано исследование => отрицательные голоса. –

+0

Спасибо за расширение на это :) – iTechy

ответ

4

Просто объявить переменную Stream перед try блоком. В противном случае его объем ограничивается самим блоком try. Помните, что область действия переменной - это блок кода, где он объявлен. Просто посмотрите на самые внутренние открывающие и закрывающие фигурные скобки, окружающие переменную, и вы сразу же узнаете, где законно ссылаться на эту переменную.

Stream stream; // or Stream stream = null; 
try 
{ 
    stream = client.OpenRead("http://repo.itechy21.com/updatematerial.txt"); 
} 
// rest of code 
+0

Лучше declate 'Stream stream = null;'. В этом случае вы можете проверить после try..catch block, если поток не равен NULL. – Epsil0neR

0

Вам необходимо объявить «поток потока» за пределами вашего заявления о попытке использовать его в вашем улове.