2017-02-13 3 views
0

Ich habe eine Struktur mit fünf Eigenschaften, die auf der Schaltfläche _click Methode (mit Windows Forms Designer) festgelegt werden. Nachdem Sie diese Einstellungen vorgenommen haben, wird der bacground-Arbeiter unter Verwendung von .RunWorkerAsync ausgeführt. Die Struktur wird dann innerhalb der _DoWork Methode des Hintergrundarbeiters verwendet. Wenn ich die Struktur innerhalb der Methode _ DoWork aufrufen, haben die Eigenschaften der Struktur alle den Wert null. Kann mir jemand sagen, was ich falsch mache? Ich bin etwas neu in C#.Struktureigenschaft nicht verfügbar

die Struktur definieren

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; 

Button-Klick-Funktion (nur relevante Code)

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 Funktion (nur relevante Code)

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

Es ist ziemlich wahrscheinlich, dass Sie brauchen eine Klasse und nicht eine Struktur, die in ganz bestimmten Bedingungen nur angemessen ist (und welche nicht gut spielen mit Veränderlichkeit) (https://msdn.microsoft.com/en-us/library/ms229017(v=vs.110).aspx) –

Antwort

5

Was ist null hier sind nicht die struct Eigenschaften aber die Argument alle zusammen.

Sie müssen die Überlastung von RunWorkerAsync(object argument) zu nennen, die das Argument:

backgroundWorker.RunWorkerAsync(_inputParameter); 
+0

Danke. Ich dachte, dass der 'public' Teil der Struktureigenschaften es innerhalb' _DoWork' verfügbar machen würde. Es scheint jetzt zu funktionieren. – Noceo