AvalonEdit 更改所有者线程

AvalonEdit Change owner thread

我使用 AvalonEdit 已经 2 年多了,没有任何问题,而且效果很好
我只是面临一个关于从后台线程更改文本的问题
使用 SetOwnerThread() 方法每次触发 VerifyAccess() 异常,即使从主线程调用时也是如此
如果我在主线程中执行所有操作,它会工作,但这也会冻结 UI
这就是为什么我想在另一个线程中执行此操作并向用户显示加载指示器
我似乎无法理解我在这里做错了什么
任何帮助或想法将不胜感激
提前致谢

编辑:
我不想使用 Dispatcher.Invoke 因为它会在更新

时阻止 UI

示例代码

public async void EditTextSample()
{
    Thread lUiThread = Thread.CurrentThread;

    //SelectedTab is the current tab viewed by the user in my application
    SelectedTab.TextEditor.Document.SetOwnerThread(null);

    await Task.Run(() => 
    {
        Thread lBackgroundThread = Thread.CurrentThread;

        SelectedTab.TextEditor.Document.SetOwnerThread(lBackgroundThread);

        string lNewText = ""
        SelectedTab.TextEditor.Document.Text = lNewText;

        SelectedTab.TextEditor.Document.SetOwnerThread(lUiThread);
    });
}

部分截图
https://imgur.com/VKsGXvk

我回来了,
所以丹尼尔建议在后台线程上创建一个新的 TextDocument 就成功了
注意:这将重置撤消堆栈
这是一个示例解决方案:)

public async void EditTextSample()
{
    Thread lUiThread = Thread.CurrentThread;

    //SelectedTab is the current tab viewed by the user in my application
    ITextSource lDocumentSnapshot = SelectedTab.TextEditor.Document.CreateSnapshot();
    TextDocument lNewDocument = null;

    await Task.Run(() => 
    {
        lNewDocument = new TextDocument();

        string lCurrentText = lDocumentSnapshot.Text;
        string lNewText = "";

        lNewDocument.Text = lNewText;

        lNewDocument.SetOwnerThread(lUiThread);
    });

    SelectedTab.TextEditor.Document = lNewDocument;
}