Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF必须在与DependencyObject相同的线程上创建DependencySource_C#_Wpf - Fatal编程技术网

C# WPF必须在与DependencyObject相同的线程上创建DependencySource

C# WPF必须在与DependencyObject相同的线程上创建DependencySource,c#,wpf,C#,Wpf,我知道这个问题已经被问过很多次了,但我尝试了我找到的所有解决方案,没有人适合我 我有以下代码: public async void setFile(QuickBrowseFile file) { try { LoggingDatabaseService db = new LoggingDatabaseService(); LoggingData data = await db.getLoggingData(file.Id);

我知道这个问题已经被问过很多次了,但我尝试了我找到的所有解决方案,没有人适合我

我有以下代码:

    public async void setFile(QuickBrowseFile file) {
        try {
            LoggingDatabaseService db = new LoggingDatabaseService();
            LoggingData data = await db.getLoggingData(file.Id);
            db.close();
            if (data != null) {
                List<LoggingModel> loggingData = data.RowData;
                int numRows = loggingData.Count;

                Application.Current.Dispatcher.Invoke((Action)(delegate {
                    for (int i = 0; i < numRows; i++) {
                        LoggingModel m = loggingData[i];
                        treeView.Items.Add(m);//!!!!!!!!!!!!exception here
                    }
                }));
            }
        } catch (Exception ex) {
            Logger.error(ex);
        }
    }
public异步void setFile(QuickBrowseFile){
试一试{
LoggingDatabaseService db=新的LoggingDatabaseService();
LoggingData=await db.getLoggingData(file.Id);
db.close();
如果(数据!=null){
List loggingData=data.RowData;
int numRows=loggingData.Count;
Application.Current.Dispatcher.Invoke((操作)(委托{
对于(int i=0;i
我尝试了一种不同的解决方案,但问题是我有一个gif图像,它显示了使用来自的解决方案的一些帧

使用下面的代码不会引发任何异常,但会在加载时阻止gif图像

var uiContext = TaskScheduler.FromCurrentSynchronizationContext();
await Task.Factory.StartNew(() => {

    LoggingDatabaseService db = new LoggingDatabaseService();
    //Console.WriteLine(file.Id);
    LoggingData data = db.getLoggingData(file.Id);
    db.close();
    if (data != null) {
        List<LoggingModel> loggingData = data.RowData;
        int numRows = loggingData.Count;
        for (int i = 0; i < numRows; i++) {
            treeView.Items.Add(loggingData[i]);
        }
    }
}, CancellationToken.None, TaskCreationOptions.None, uiContext);
var uiContext=TaskScheduler.FromCurrentSynchronizationContext();
等待任务。工厂。开始新建(()=>{
LoggingDatabaseService db=新的LoggingDatabaseService();
//Console.WriteLine(file.Id);
LoggingData=db.getLoggingData(file.Id);
db.close();
如果(数据!=null){
List loggingData=data.RowData;
int numRows=loggingData.Count;
对于(int i=0;i
您在第一个代码块上遇到的异常是什么?其:引发的异常:PresentationFramework.dll中的“System.Windows.Markup.XamlParseException”。其他信息:必须在与DependencyObject相同的线程上创建DependencySource。您可以尝试将同步上下文传递给
Task.Factory.StartNew
like
var uiContext=TaskScheduler.FromCurrentSynchronizationContext();Task.Factory.StartNew(()=>{},CancellationToken.None,TaskCreationOptions.None,uiContext)。任务是在后台线程上创建的,请查看这是否有帮助。为什么要将
treeView.Items.Add(m)
移动到单独的工作线程?除非你的设计有缺陷,否则这不应该是你代码中缓慢的部分。你能在不访问外部数据的情况下修改你的代码来产生这种行为吗(可验证的示例)?您在第一个代码块上遇到的异常是什么?其:引发的异常:PresentationFramework.dll中的“System.Windows.Markup.XamlParseException”其他信息:必须在与DependencyObject相同的线程上创建DependencySource。您可以尝试将同步上下文传递到
任务.Factory.StartNew
var uiContext=TaskScheduler.FromCurrentSynchronizationContext();Task.Factory.StartNew(()=>{},CancellationToken.None,TaskCreationOptions.None,uiContext)。任务是在后台线程上创建的,请查看这是否有帮助。为什么要将
treeView.Items.Add(m)
移动到单独的工作线程?除非你的设计有缺陷,否则这不应该是你代码中缓慢的部分。你能在不访问外部数据的情况下修改你的代码来产生这种行为吗(可验证的例子)?