调用线程无法访问该对象,因为另一个线程拥有它

时间:2019-07-17 15:26:00

标签: c# wpf multithreading

我知道这个问题已经被治疗了好几次,但是给出的代码在很大程度上非常复杂,与我的想法并不相符或几乎没有。 所以我的问题是,在执行我的代码时,我得到标题的错误消息

我的主线程中有一个数据网格,我想在辅助线程中对其进行修改:

private void BtnThread_Click(object sender, RoutedEventArgs e)
        {
            thread = new Thread(new ThreadStart(ThreadLoop));
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
        }
        public void ThreadLoop()
        {
            DateTime? dtdebTemp = new DateTime();
            DateTime? dtfinTemp = new DateTime();
            DataGrid dg = new DataGrid();
            DataGridTextColumn col = new DataGridTextColumn();
            col.Header = "test";
            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                dtdebTemp = dtDeb.Value;
                dtfinTemp = dtFin.Value;
                dg = MyDataGridOfMainThread;
            }));
            dg.Columns.Add(col);
        }

我暂时只是想添加一个测试列,但这是不可能的。 谢谢您将来的回答。

1 个答案:

答案 0 :(得分:-1)

这是因为无法访问对象出线程。 您需要使用委托进行访问。 https://docs.microsoft.com/it-it/dotnet/csharp/language-reference/builtin-types/reference-types