1
我想在後臺加載新表單並在加載後顯示它。 但我總是得到這個錯誤:「無效的跨線程訪問」與代碼: 如何使它工作?!在後臺工作人員和showdialog加載新表格在完成的方法
public partial class f1 : Form
{
private Form f2;
public f1()
{
InitializeComponent();
BackgroundWorker bgw = new BackgroundWorker();
bgw.RunWorkerAsync();
bgw.DoWork += new DoWorkEventHandler(dowork);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(completed);
}
void dowork(object sender, DoWorkEventArgs e)
{
f2 = new f2();
}
void completed(object sender, RunWorkerCompletedEventArgs e)
{
f2.showdialog();
this.Close();
}
}
它永遠不會工作。您不能在後臺線程上執行任何UI工作。無論如何,在這種特定情況下你會獲得什麼?如果你在構造函數中長時間運行的工作將代碼移走,也許你可以卸載(部分)方法到後臺線程。 –
可能重複[無效的跨線程訪問backgroundworker錯誤c#](http://stackoverflow.com/questions/28597958/invalid-cross-thread-access-backgroundworker-error-c-sharp) –
錯誤的方法。你應該立即顯示'f2'(順便說一句,這是一個非常糟糕的類名**,因爲它沒有意義,甚至不遵循標準的命名約定)。一旦顯示錶格,你就可以從新表格開始後臺處理。如果您不想立即顯示新表單,那麼您應該向用戶提供一些反饋,以便他知道發生了什麼情況。 – Phil1970