У меня есть кнопка SilverLight, которая получает комментарий из текстового поля для сохранения в моей базе данных, а затем закрывает окно.
SilverLight:
Task task = new Task();
private void saveChangeBtn_Click(object sender, RoutedEventArgs e)
{
string commentTxtBxValue = commentTxtBx.Text;
task.SaveComment(commentTxtBx.Text);
commentTxtBx.Text = commentTxtBxValue;
HtmlPage.Window.Invoke("closeWindow", null);
}
SilverLight вызывает SaveComment()
в модели моего проекта SilverLight, которая создает URI и, используя этот URI, отправляет текст комментария на мой контроллер MVC с UploadStringAsync()
.
Код модели:
public void SaveComment(string Comment)
{
// Create post string
StringBuilder postData = new StringBuilder();
postData.AppendFormat("?{0}={1}", "id", this.PageBreakId);
postData.AppendFormat("&{0}={1}", "comment", Comment);
string dataString = postData.ToString();
byte[] data = Encoding.UTF8.GetBytes(dataString);
// Configure client
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.UploadStringCompleted += new UploadStringCompletedEventHandler(client_UploadStringCompleted);
string baseUri = HtmlPage.Document.DocumentUri.ToString().ToLower();
baseUri = baseUri.Substring(0, baseUri.IndexOf("currentPage"));
Uri uri = new Uri(baseUri + "SaveComment", UriKind.Absolute);
try
{
// Start upload
client.UploadStringAsync(uri, dataString);
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
}
}
Наконец, мой MVC-контроллер сохраняет его в базе данных.
MVC-контроллер:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveComment()
{
//Save to Database
}
Моя проблема в том, что, похоже, мой код SilverLight HtmlPage.Window.Invoke("closeWindow", null);
закрывает страницу и завершает выполнение кодапрежде чем у него есть шанс закончить.Если я установлю точку останова на своем контроллере MVC, она будет срабатывать только иногда.Я заметил, что FireFox почти всегда попадает в него, но IE8 почти никогда не попадает в него.
Что я могу сделать, чтобы мой код завершил работу до закрытия страницы?
Спасибо,
Аарон