2016-01-11 2 views
0

Нужна помощь .. Это мое первое приложение. Я пытаюсь заполнить GridView данными JSON. код ниже работает, но теперь я пытаюсь переместить коды кода и public static string ReadStreamAsString(Stream input) с MainPage.xaml.cs в другой .cs-файл без везения. Как мне написать код, чтобы я мог его правильно называть? без async-метода я могу сделать то же самое, но тогда код не работает.Как вызвать метод async из другого файла класса

void MainPage_Loaded(object sender, RoutedEventArgs e) 
    { 
     haePostimerkitPilvesta(); 
    } 

    async private void haePostimerkitPilvesta() 
    { 

     Uri address = new Uri("xxx.json"); //public link of our file 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); 
     WebResponse response = await request.GetResponseAsync(); 
     Stream stream = response.GetResponseStream(); 
     string content = ReadStreamAsString(stream); 
     GridViewPostimerkit.ItemsSource = JsonConvert.DeserializeObject(content, typeof(List<Postimerkit>)); 

    } 

    public static string ReadStreamAsString(Stream input) 
    { 
     byte[] buffer = new byte[16 * 1024]; 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      int read; 
      while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       ms.Write(buffer, 0, read); 
      } 
      return Encoding.UTF8.GetString(ms.ToArray(), 0, ms.ToArray().Count()); 
     } 
    } 
+1

Возможный дубликат [Вызов метода асинхронной синхронно] (http://stackoverflow.com/questions/22628087/calling-async-method-synchronously) – BlueTrin

+0

Попробуйте http://stackoverflow.com/questions/22628087/ call-async-method-synchronously – BlueTrin

+3

Вы меняете частный метод на публикацию при его перемещении? –

ответ

0

Преобразование haePostimerkitPilvesta() к haePostimerkitPilvestaAsync(), которая возвращает задачу и установить GridViewPostimerkit.ItemsSource в MainPage_Loaded() событие. Теперь вы также сможете переместить методы в другой файл.

async void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    GridViewPostimerkit.ItemsSource = await haePostimerkitPilvestaAsync(); 
} 

public static async Task<List<Postimerkit>> haePostimerkitPilvestaAsync() 
{ 

    Uri address = new Uri("xxx.json"); //public link of our file 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); 
    WebResponse response = await request.GetResponseAsync(); 
    Stream stream = response.GetResponseStream(); 
    string content = ReadStreamAsString(stream); 
    return JsonConvert.DeserializeObject(content, typeof(List<Postimerkit>)); 
} 

public static string ReadStreamAsString(Stream input) 
{ 
    byte[] buffer = new byte[16 * 1024]; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     int read; 
     while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
     { 
      ms.Write(buffer, 0, read); 
     } 
     return Encoding.UTF8.GetString(ms.ToArray(), 0, ms.ToArray().Count()); 
    } 
} 
+0

Большое спасибо, это работает! – user5445811

0

Похоже, что вы переместили методы к другому классу, но вы по-прежнему называть их, как если бы они были еще метод того же класса.

Кстати, вам также нужно будет сделать haePostimerkitPilvesta() статичным, если у вас нет экземпляра нового класса, который может вызвать его.

public class A { 
    public void F() { 
     // Compiler says "The name 'M' does not exist in current context." 
     // Current context is A. There is no M in A. M who? M in B or M in C? 
     // You must specify what M you mean! The compiler plays no guessing games. 
     M(); 

     // This will compile. 
     // Now the compiler knows where M lives and can find him. 
     B.M(); 
    } 
} 

public class B { 
    public static void M() { 
     // Do stuff 
    } 
} 

public class C { 
    public static void M() { 
     // Do TOTALLY DIFFERENT stuff 
    } 
} 
Смежные вопросы