我正在做一個Visual Studio裝飾擴展。如果沒有用戶輸入至少2秒,我想更新裝飾。所以我建造了一個工人並試圖去除和添加裝飾物,但是VS說它不能被更新,因爲非UI線程已經調用了它。所以我等了沒有線程,然後我的編輯變得非常滯後(因爲UI線程等待)視覺工作室繪畫裝飾與懶惰更新
我想知道是否有更新裝飾與懶惰更新的方法。 繪圖裝飾是通過調用AddAdornment()完成的,我找不到如何調用ui線程來繪製。
下面是我的代碼
internal async void OnLayoutChanged(object sender, TextViewLayoutChangedEventArgs e)
{
Print("OnLayoutChanged Called");
task = Task.Factory.StartNew(() =>
{
Print("task Started");
if (e.NewSnapshot != e.OldSnapshot)
{
parseStopwatch.Restart();
shouldParse = true;
}
ParseWork(e);
});
await task;
}
private async void ParseWork(object param)
{
var e = (TextViewLayoutChangedEventArgs)param;
if (e == null)
{
shouldParse = false;
parseStopwatch.Stop();
CsharpRegionParser.ParseCs(this.view.TextSnapshot);
DrawRegionBox();
return;
}
while (shouldParse)
{
Task.Delay(10);
if ((shouldParse && parseStopwatch.ElapsedMilliseconds > 2000) || parseStopwatch.ElapsedMilliseconds > 5000)
{
break;
}
}
shouldParse = false;
parseStopwatch.Stop();
CsharpRegionParser.ParseCs(this.view.TextSnapshot);
DrawRequest(e);
return;
}
在後臺任務中等待,調用主線程更新 –