2017-02-13 75 views
0

我有一個結構有五個屬性,它們在按鈕_click方法(使用Windows窗體設計器)上設置。設置完這些之後,便可使用.RunWorkerAsync運行免費工作人員。該結構然後在後臺工作者的_DoWork方法內部使用。結構屬性不可用

但是,當我調用_ DoWork方法中的結構體時,結構體的所有屬性都具有值null。誰能告訴我我做錯了什麼?我對C#很陌生。

定義結構

struct 
FtpSetting 
{ 
    public String Server { get; set; } 
    public String Username { get; set; } 
    public String Password { get; set; } 
    public String FileName { get; set; } 
    public String FullName { get; set; } 
} 
FtpSetting _inputParameter; 

按鈕點擊功能(僅適用於相關的代碼)

FileInfo fi = new FileInfo(ofd.FileName); 
_inputParameter.Server = txtServer.Text; 
_inputParameter.Username = txtServer.Text; 
_inputParameter.Password = txtServer.Text; 
_inputParameter.FileName = fi.Name; 
_inputParameter.FullName = fi.FullName; 
backgroundWorker.RunWorkerAsync(); 

DoWork的功能(僅適用於相關的代碼)

string filename = ((FtpSetting)e.Argument).FileName; // Code crashes here 
string fullname = ((FtpSetting)e.Argument).FullName; // ...But all the below values 
string username = ((FtpSetting)e.Argument).Username; // ...Are null as well :-(
string password = ((FtpSetting)e.Argument).Password; 
string server = ((FtpSetting)e.Argument).Server; 
+1

這很可能是你需要一個類,而不是一個結構,其僅在非常特殊的條件合適(和不發揮好與可變性)(https://msdn.microsoft.com/en-us/library/ms229017(v=vs.110).aspx) –

回答

5

什麼是null這裏不是struct的屬性,但Argument在一起。

你需要調用的RunWorkerAsync(object argument)這需要論證過載:

backgroundWorker.RunWorkerAsync(_inputParameter); 
+0

謝謝。我認爲struct屬性的'public'部分在'_DoWork'內部可用。它現在似乎在工作。 – Noceo