Отправить информацию в другую форму c # - PullRequest
1 голос
/ 15 февраля 2010

У меня есть приложение, которое загружает файлы на сервер, но когда я нажимаю кнопку загрузки, оно останавливается до тех пор, пока оно не будет завершено, поэтому я подумал сделать всплывающую форму другой, которая говорит о загрузке и выполняет всю загрузку в этой форме, вложенной в заморозить эту основную форму. Но для этого мне нужно иметь возможность отправить выбранную информацию в эту другую форму.

Я пытался использовать BackgroundWorker, но это не работает, форма все еще зависает.

Ответы [ 3 ]

3 голосов
/ 15 февраля 2010

Причина его зависания заключается в том, что вы выполняете загрузку в том же потоке, что и графический интерфейс или основной поток. Вы можете создать рабочий поток для обработки загрузки, чтобы графический интерфейс не блокировался при обработке загрузки.

Пример:

    private void uploadButton_Click(object sender, EventArgs e)
    {
        object[] params = new object[] { "your file what ever type this is a generic example"};
        Thread uploadThread = new Thread(new ParameterizedThreadStart(processUpload));
        uploadThread.IsBackground = true;
        uploadThread.Start(params);
    }

    private void processUpload(object params){
       // do upload logic here 
       object[] _params = (object[])params;
       string s = _params[0].ToString();
    }

Передача информации из одной формы в другую не вызывает затруднений, но эта форма также приведет к блокировке при обработке. Если это то, что вы хотите сделать, тогда просто создайте конструктор, который будет принимать параметры для всего, что вы хотите передать. Тогда назови это соответственно.

private string something = null;

public MySecondForm(string Something){
  this.something = Something;
  MessageBox.Show(this.something);
}

// Call this in the parent form 
MySecondForm mySecondForm = new MySecondForm("hello world");
mySecondForm.Show();
1 голос
/ 15 февраля 2010

Если вы используете WebClient класс, вы можете использовать UploadFileAsync метод. Также вы можете передавать некоторую информацию из одной формы в другую следующим образом.

Form2

Добавить простой конструктор в Form2.

public Form2(string path) { // ... }

Form1

Form2 frm2 = new Form2("Path");
0 голосов
/ 15 февраля 2010

Посмотрите на этот пример в Code Project , где приведены некоторые советы по реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...