私のプログラムで何が間違っていますか?実行中のスレッドをUIから分離することはできません。スレッドの実行中にUIに到達することはできません。UIから別のスレッド
最初のオプション:
// on button click:
this.CreateImageList();
private void CreateImageList()
{
this.images.Clear();
ThreadStart threadStart = delegate
{
this.dispatcher.BeginInvoke(new ThreadStart(delegate
{
foreach (var filePath in this.fileBuffer)
{
var result = new ImageObject(filePath);
if (result.Image != null)
{
this.images.Add(result);
this.dispatcher.Invoke(() => this.StatusText = filePath, DispatcherPriority.Render);
}
}
this.RaisePropertyChanged("Images");
}));
};
var thread = new Thread(threadStart);
thread.IsBackground = true;
thread.Start();
}
番目のオプション:最初に
// on button click:
this.CreateImageList();
private async void CreateImageList()
{
await this.CreateImageListAsync();
}
private async Task CreateImageListAsync()
{
this.images.Clear();
var countTotal = this.fileBuffer.Count();
var index = 0;
await Task.Run(() => this.dispatcher.Invoke(
(() =>
{
foreach (var filePath in this.fileBuffer)
{
var result = new ImageObject(filePath);
if (result.Image != null)
{
this.images.Add(result);
var percent = (index * 100)/countTotal;
this.DoForce(() => this.StatusText = percent + "% " + filePath);
}
index++;
}
this.RaisePropertyChanged("Images");
}), DispatcherPriority.SystemIdle));
}
public void DoForce(Action action)
{
this.dispatcher.Invoke(DispatcherPriority.Render, action);
}
、プログラムが作業を行う第二の選択肢で
は、これは私のviewmodelです。しかし、第一及び第二のオプションではUIを使用して、とにかく(非応答性のUIを生じる)UIスレッド上でそれを実行するUIディスパッチャにデリゲートを入れているので、これはユーザー
実際にどのようなエラーが表示されるのですか?あなたが見たものの解釈ではなく、正確な誤りの観察を提供してください! –
これは、UIディスパッチャ自体にデリゲートを配置しているためです。あなたはUIディスパッチャーでUIタスクだけを委譲し、残りはバックグラウンドスレッド上で実行することができます。 –
エラーはありません!プログラムは正常に動作します!しかし、私は窓を移動することはできません、またはボタンをクリックしてください。 – peter70