Разветвленный поток в C# .net App умирает необъяснимо и без каких-либо ошибок
Во-первых, я прошу прощения, если это довольно расплывчатый вопрос, его довольно сложно объяснить и довольно странно, и это также не кажется особенно специфической проблемой. но я сделаю все возможное, чтобы объяснить здесь:
У меня есть приложение на C# .net, которое разветвляет новый поток для выполнения большей части его работы - основной поток просто обрабатывает интерфейс GUI.
syncThread = new Thread(new ThreadStart(syncClass.sync));
Поток синхронизации постоянно зацикливается...
public void sync()
{
while (true)
{
do stuff
И, в конце концов, есть сон, чтобы остановить его все время CPU
System.Threading.Thread.Sleep(sync_interval);
Чтобы заполнить некоторый фон, то, что он делает в "делать вещи", это подключиться к Sage с помощью Sages API, подключиться к службе SOAP и, в основном, получить данные из Sage и передать их в SOAP. Это работает нормально ОДНАКО...
Кажется, что происходит то, что поток через случайные промежутки времени просто прекращает выполнение - как будто он просто "ушел". Я вошел на экран и в файл, чтобы попытаться найти конкретную причину для этого, но он останавливается на разных частях своего процесса почти каждый раз.
Я попытался перехватить ошибки и записать их на экран и в файл, а также записать ход выполнения кода в файл - но когда это происходит - он просто не выдает ошибку (или, если это происходит, я не могу ее перехватить). Так что я полностью застрял.
Чтобы добавить к причуде - это, кажется, не происходит в каждой системе, на которой это установлено, но случается больше, чем просто нечетная.
Без каких-либо обнаруженных ошибок, которые нужно исправить, и без установленной области кода, чтобы исследовать проблему (потому что, как я говорю - она не согласована), я полностью озадачен тем, как действовать.
Итак, есть ли какие-либо общие проблемы с потоками, о которых кто-либо знает, которые могут вызвать такое поведение? Есть ли лучший способ для меня, чтобы в первую очередь заняться потоками, или кто-то может предложить какой-либо дополнительный совет о том, как найти и перехватить ошибку, чтобы я мог ее исправить?
Пожалуйста помоги:)
1 ответ
Если вы говорите с Sage 50 через SDO, это COM-интерфейс, и он работает в однопотоковой квартире (STA), я на 99% уверен, что ваше приложение тоже будет работать в режиме STA - наше приложение работает как STA и если я вспоминаю, мы только нить элементы интерфейса.
Попробуйте вставить [STAThread] в функцию Main() и посмотрите, поможет ли это - Дайте мне знать, как вы попали.