私の機能には3つの部分があります。 ApartmentState.STAがオンになって非同期タスクを使用してレポートビューアを作成する方法
パート1つのパラメータポップアップ
パート2は、新しいスレッドでコードを実行します。
パート3 - ショーレポートビューアー
私は現在)(このエラーにreport.Showで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();
}
}
私のコードの切断を受けています。
anticipatedReport.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