2017-02-13 8 views
0

У меня есть структура с пятью свойствами, которые установлены на кнопке _click (с использованием Windows Forms Designer). После установки, рабочий стол bacground выполняется, используя .RunWorkerAsync. Затем структура используется внутри метода _DoWork рабочего фона.Свойство Struct недоступно

Однако, когда я вызываю структуру внутри метода _ DoWork, свойства struct all имеют значение 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

Спасибо. Я думал, что «публичная» часть свойств структуры сделала ее доступной внутри '_DoWork'. Кажется, сейчас он работает. – Noceo