Что у меня есть в классе
public async Task<BitmapImage> GetBitmap(string ConnectingString, string SQLCode)
{
SqlConnection con1 = new SqlConnection(ConnectingString);
//Open Connection String
con1.Open();
// load image from the database
SqlCommand Commandcmd = new SqlCommand(SQLCode, con1);
Task<BitmapImage> t = Task.Run(() =>
{
BitmapImage myBitmapImage = new BitmapImage();
SqlDataReader rdr1 = null;
rdr1 = Commandcmd.ExecuteReader();
while (rdr1.Read())
{
if (rdr1 != null)
{
if (rdr1[0] != DBNull.Value)
{
byte[] data = (byte[])rdr1[0]; // 0 is okay if you only selecting one column
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(data))
{
// BitmapImage.UriSource must be in a BeginInit/EndInit block
myBitmapImage.BeginInit();
myBitmapImage.StreamSource = ms;
myBitmapImage.CacheOption = BitmapCacheOption.OnLoad;
myBitmapImage.DecodePixelHeight = 500;
myBitmapImage.DecodePixelWidth = 500;
myBitmapImage.EndInit();
myBitmapImage.Freeze();
}
return myBitmapImage;
}
}
}
return myBitmapImage;
});
await t;
return t.Result;
}
в и что я использую в событии:
MyImage.Source = await s.GetBitmap(PublicVar.ConnectionString, "SELECT (UserImage) FROM Users WHERE UserID = " + id);
Но когда это сработает, моя программа выдаст ошибку
его текст
«Вызывающий поток не может получить доступ к этому объекту, потому что он принадлежит другому потоку».
я могу сделать это исправить Dischapter.Invoke
Но на самом деле это не асинхронно.
Что я делаю не так?