Вы можете опубликовать обновленный код. возможно я могу определить проблему?

ю, что таких вопросов много. Я хотел бы опубликовать, чтобы я мог поделиться своим конкретным проблемой, потому что я расстраиваюсь.

Я запускаю поток, который запрашивает путь из БД и помещает его в элемент 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();

    }
}

Ответы на вопрос(3)

Ваш ответ на вопрос