Многопоточность.
Привет всем, и снова мне нужна ваша помощь.:SOS:
Подскажите как реализовать в C# многопоточность, если при этом мне необходима связь функции нового потока с формой (соответственно она не может быть статической). Да и нужно при этом передать в эту функцию некоторые переменные. Пробовал так: Код:
Thread myThread = new Thread(Things); //Создаем новый объект потока (Thread) Код:
private void button1_Click(object sender, EventArgs e) Да и пробовал делать так: Код:
private void button1_Click(object sender, EventArgs e) |
Ответ: Многопоточность.
Сорри. Статичность объекта оказалась ни при чем. Однако во время выполнения программы происходит ошибка: попытка доступа к форме созданной не в этом потоке. Как обойти?
|
Ответ: Многопоточность.
У формы (Windows.Forms) как и у любого контрола есть метод Invoke, c помощью которого можно вызвать делегат из основного потока. Достаточно сделать что-то типа form.Invoke(()=>{UpdateForm();});
|
Ответ: Многопоточность.
Цитата:
error CS1660: Не удается преобразовать лямбда-выражение в тип "System.Delegate", так как он не является типом делегата error CS0103: Имя "UpdateForm" отсутствует в текущем контексте |
Ответ: Многопоточность.
Цитата:
PHP код:
PHP код:
|
Ответ: Многопоточность.
Ему все равно не нравится нестатичность формы, и он требует ссылку на нее. Может я не туда вставил предложенный тобой код? ты может поконкретнее указать куда что вставляется. К примеру моя программа сейчас выглядит так:
Код:
private void button1_Click(object sender, EventArgs e) |
Ответ: Многопоточность.
Что такое Mainwindow? Это тоже самое что и this?
|
Ответ: Многопоточность.
Mainwindow это главная форма: та самая на которой происходят изменения.
(Поменял имя с Form1). |
Ответ: Многопоточность.
Т.е. это имя класса, а не ссылка на форму? Поменяй на this и должно заработать.
|
Ответ: Многопоточность.
Супер! Спасибо!
А вот если ты расскажешь как ссылки на объекты делать, то вообще тебе цены не будет! |
Ответ: Многопоточность.
все класыс ссылки) ссылки на типы - ref
|
Ответ: Многопоточность.
Разве ref работает не только ссылка на переменную?
Да и вопрос:"Как передать переменную в поток?" - не снят. |
Ответ: Многопоточность.
|
Ответ: Многопоточность.
Проблема возникает. Если делать отдельным классом то пропадает возможность взаимодействовать с формой.
Решил так: перенес нужную переменную в внешнюю часть класса, что дало возможность обращаться к ней из обеих функций. Но встал один вопрос: Почему когда выполняется второй поток у пользователя нет доступа к форме? Она просто зависает. Я думал потоки для того и нужны, чтобы приложение могло работать в нескольких направлениях одновременно. |
Ответ: Многопоточность.
Ты что-то сделал не правильно.
|
Часовой пояс GMT +4, время: 15:22. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot