我的函數有三個部分。如何使用異步任務創建Reportviewer
第一部分參數彈出
第二部分執行的代碼在一個新的線程與ApartmentState.STA打開。 3
部分 - 顯示的ReportViewer
我目前收到此錯誤the calling thread cannot access this object because a different thread owns it.
public async void AnticipatedEntriesReport(bool fund)
{
var anticipatedReport = new AnticipatedReport(fund);
ReportPreviewForm report = new ReportPreviewForm();
anticipatedReport.InitializeParameters();
if (anticipatedReport.GetParameters() != null)
{
await RunAsyncTask(
() =>
{
report = anticipatedReport.GenerateReport(SelectedLoans);
});
report.Show();
}
}
我的代碼處斷裂report.Show()。
expectedReport.GenerateReport返回一個ReportPreviewForm。
我想知道我做錯了什麼?我認爲這是基於我創建對象的位置。
public async Task RunAsyncTask(System.Action action)
{
try
{
await ThreadManager.StartSTATask(action);
}
catch (Exception ex)
{
}
}
public static Task StartSTATask(System.Action func)
{
var tcs = new TaskCompletionSource<object>();
var thread = new Thread(() =>
{
try
{
func();
tcs.SetResult(null);
}
catch (Exception e)
{
tcs.SetException(e);
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
return tcs.Task;
}
爲什麼能你是否將報告作爲任務的結果返回? – shlatchz
什麼是'RunAsyncTask'? –
@StephenCleary嗨,我更新它包括RunAsyncTask方法 – Master