Вы можете опубликовать обновленный код. возможно я могу определить проблему?
ю, что таких вопросов много. Я хотел бы опубликовать, чтобы я мог поделиться своим конкретным проблемой, потому что я расстраиваюсь.
Я запускаю поток, который запрашивает путь из БД и помещает его в элемент image.problem, я создал изображение в xaml, поэтому, когда я запускаю этот поток, он выдает ошибку доступа к этому объекту, которая не может получить доступ к элементу изображения.
тогда как мне установить его без использования xaml ?? вот мой фрагмент кода:
public partial class Window1 : Window
{
Thread Frame1;
public Window1()
{
InitializeComponent();
intializeDb();
#region start frame 1 thread
Frame1 = new Thread(frame1);
Frame1.SetApartmentState(ApartmentState.STA);
Frame1.IsBackground = true;
Frame1.Start();
#endregion
}
public void frame1()
{
string k;
command.CommandText = "SELECT * FROM imageframe1";
sqlConn.Open();
Reader = command.ExecuteReader();
while (Reader.Read())
{
BitmapImage logo = new BitmapImage();
logo.BeginInit();
k = (string)(Reader.GetValue(1));
logo.UriSource = new Uri(k);
logo.EndInit();
image1.Source = logo; //THROWS THE ERROR HERE.IT CANT ACCESS image1
Thread.Sleep(1000);
}
sqlConn.Close();
Reader.Close();
}
как бы я получить доступimage1
тогда? если я создаю новый в потоке, я должен поместить его как дочерний элемент панели, а затем я получу ошибку, которая не сможет получить доступ к панели.
Любой способ обойти это? Рад, если кто-то может написать пример на основе моего фрагмента.
редактируется безуспешно и выдает ту же ошибку:
public partial class Window1 : Window
{
public readonly SynchronizationContext mySynchronizationContext;
public Window1()
{
InitializeComponent();
mySynchronizationContext = SynchronizationContext.Current;
Frame1 = new Thread(frame1);
Frame1.SetApartmentState(ApartmentState.STA);
Frame1.IsBackground = true;
Frame1.Start();
}
public void frame1()
{
string k;
command.CommandText = "SELECT * FROM imageframe1";
sqlConn.Open();
Reader = command.ExecuteReader();
while (Reader.Read())
{
BitmapImage logo = new BitmapImage();
logo.BeginInit();
k = (string)(Reader.GetValue(1));
logo.UriSource = new Uri(k);
logo.EndInit();
SendOrPostCallback callback = _ =>
{
image1.Source = logo;
};
mySynchronizationContext.Send(callback, null);
//image1.Source = logo;
Thread.Sleep(1000);
}
sqlConn.Close();
Reader.Close();
}
}