В этой строке появляется ошибка: "Не удается получить доступ к удаленному объекту".
db._fbcontacts.InsertOnSubmit(new FacebookContactsList { Name = FBName });
Что может быть причиной этого?
Существует метод, когда я хочу написать имя учетной записи пользователя из facebook в localdatabase
public void LoadUserInfo()
{
using (FacebookDataContext db = new FacebookDataContext(DBConnectionstring))
{
FacebookClient fb = new FacebookClient(App.AccessToken);
fb.GetCompleted += (o, e) =>
{
var result = (IDictionary<string, object>)e.GetResultData();
var FBName = String.Format("{0} {1}", (string)result["first_name"], (string)result["last_name"]);
db._fbcontacts.InsertOnSubmit(new FacebookContactsList { Name = FBName });
db.SubmitChanges();
};
fb.GetTaskAsync("me");
}
}
Ваш метод обратного вызова вызывается после того, как был удален объект FacebookDataContext
.
Это код, который выполняется немедленно
using (FacebookDataContext db = new FacebookDataContext(DBConnectionstring))
{
FacebookClient fb = new FacebookClient(App.AccessToken);
// no callback method is being executed here!
fb.GetTaskAsync("me");
}
то, когда- GetTaskAsync
позже, когда GetTaskAsync
завершится, выполняется следующее:
var result = (IDictionary<string, object>)e.GetResultData();
/*blah blah snip*/
db._fbcontacts.InsertOnSubmit(new FacebookContactsList { Name = FBName });
db.SubmitChanges();
Но из первого блока кода вы можете видеть, что после выхода из области using
оператора db уже был удален.
Вместо этого вам нужно вытащить db из блока использования и утилизировать его вручную...
public void LoadUserInfo()
{
FacebookDataContext db = new FacebookDataContext(DBConnectionstring);
FacebookClient fb = new FacebookClient(App.AccessToken);
fb.GetCompleted += (o, e) =>
{
try
{
/*blah fricken blah snipped */
db.SubmitChanges();
}finally{
if(db != null) db.Dispose();
}
};
fb.GetTaskAsync("me");
}
Или вы можете вывести экземпляр контекста внутри обработчика события.
public void LoadUserInfo()
{
FacebookClient fb = new FacebookClient(App.AccessToken);
fb.GetCompleted += (o, e) =>
{
/*yadda mfing blah */
using (FacebookDataContext db = new FacebookDataContext(DBConnectionstring))
{
db._fbcontacts.InsertOnSubmit(new FacebookContactsList { Name = FBName });
db.SubmitChanges();
}
};
fb.GetTaskAsync("me");
}