Немного переделала.
Ошибка CS0029 Не удается неявно преобразовать тип "CookComputing.XmlRpc.XmlRpcStruct" в "System.Threading.Tasks.Task".
private void button5_Click(object sender, EventArgs e)//КНОПКА ОБНОВИТЬ
{
obnovit();
}
public async void obnovit() //
{
for (int i = 0; i < kol; i++)
{
int idv = idvseh[i];
vse[ii] = await obnovit1(idv);
ii = ii + 1;
}
}
public Task<XmlRpcStruct> obnovit1(int idv)
{
object[] arr = proxy.get(idv);
XmlRpcStruct arr3 = (XmlRpcStruct)arr[3];
return arr3;// теперь здесь ошибка
}
У вас в описании ошибки все написано. Метод proxy.get() возвращает массив объектов, а результат выражение после await должнен реализовывать метод GetAwaiter() (утиная типизация) Если очень хочется, то сделайте асинхронную обертку, что то типа этого:
public Task<XmlRpcStruct> ObnovitAsync()
{
var tcs = new TaskCompletionSource<XmlRpcStruct>();
Task.Run(() => {
var result = this.obnovit1();
tcs.SetResult(result);
});
return tcs.Task;
}
Метод Obnovit очень режет глаза, может быть лучше Update
Судя по тому коду, что вы представили, вам вообще тут не нужна асинхронность. И вы либо убираете ее везде:
private void button5_Click(object sender, EventArgs e)//КНОПКА ОБНОВИТЬ
{
obnovit();
}
public void obnovit()
{
for (int i = 0; i < kol; i++)
{
int idv = idvseh[i];
vse[ii] = obnovit1(idv);
ii = ii + 1;
}
}
public XmlRpcStruct obnovit1(int idv)
{
object[] arr = proxy.get(idv);
XmlRpcStruct arr3 = (XmlRpcStruct)arr[3];
return arr3;
}
Либо делаете proxy.get() асинхронным (если это возможно) и "протягиваете" асинхронность через все методы:
private async void button5_Click(object sender, EventArgs e)//КНОПКА ОБНОВИТЬ
{
// try/catch нужен, иначе ошибка тут может обрушить приложение или вы вообще о ней не узнаете
try
{
await obnovit();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
public async Task obnovit()
{
for (int i = 0; i < kol; i++)
{
int idv = idvseh[i];
vse[ii] = await obnovit1(idv);
ii = ii + 1;
}
}
public async Task<XmlRpcStruct> obnovit1(int idv)
{
object[] arr = await proxy.get(idv);
XmlRpcStruct arr3 = (XmlRpcStruct)arr[3];
return arr3;
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей