Streaming Web Services
помогите решить проблему с веб сервисами, Так как своего опыта не хватает.
Задача состоит в том, чтобы дождаться окончания получения данных (из БД заливаются данные на локальный компьютер в xml - может быть несколько мегабайт) с сервера.
Если не дожидаться асинхронного выполнения сервиса и закрыть диалоговое окно, то программа вылетает с ошибкой
Код:
Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
Решал следующими методами:
На сервере
- вебсервис XmlDocument
На клиенте
Код:
private void thrd(object state)
{
SalesForceDB = new SalesForceDB.SalesForceDB();
SalesForceDB.Credentials = CredentialCache.DefaultCredentials;
SalesForceDB.MainCompanyListCompleted += new MainCompanyListCompletedEventHandler(SalesForceDB_MainCompanyListCompleted);
SalesForceDB.MainCompanyListAsync();
Thread.CurrentThread.Join();
Thread.Sleep(TimeSpan.FromSeconds(20));
}
{
SalesForceDB = new SalesForceDB.SalesForceDB();
SalesForceDB.Credentials = CredentialCache.DefaultCredentials;
SalesForceDB.MainCompanyListCompleted += new MainCompanyListCompletedEventHandler(SalesForceDB_MainCompanyListCompleted);
SalesForceDB.MainCompanyListAsync();
Thread.CurrentThread.Join();
Thread.Sleep(TimeSpan.FromSeconds(20));
}
thrd - Thread, стартующий по вызову.
Код:
void SalesForceDB_MainCompanyListCompleted(object sender, MainCompanyListCompletedEventArgs e)
{
string FileName = @"MainProspects.xml";
XmlDocument xml = new XmlDocument();
xml.Load(FileName);
xml.RemoveAll();
XmlNode nodes = e.Result;
xml.AppendChild(xml.ImportNode(nodes, true));
xml.Save(FileName);
// обновление прогрессбара
BeginInvoke(new UpdateProgressDelegate(UpdateProgress), 20);
{
string FileName = @"MainProspects.xml";
XmlDocument xml = new XmlDocument();
xml.Load(FileName);
xml.RemoveAll();
XmlNode nodes = e.Result;
xml.AppendChild(xml.ImportNode(nodes, true));
xml.Save(FileName);
// обновление прогрессбара
BeginInvoke(new UpdateProgressDelegate(UpdateProgress), 20);
Расскажите, как надо правильно :)