AppDomain. GetCurrentThreadID по сравнению с Потоком. ManagedThreadID для Windows API calls?

Вы можете скопировать строку из листа ответов на целевой лист, а затем удалить строку из листа ответов.

if (s.getName() == "Form Responses 1" && r.getColumn() == 11 && r.getValue() == true) {
  var cell = sheet.getRange(index, dateCol + 1);
  var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
  cell.setValue(date);
  // copy n delete
  var row = r.getRow();
  var numColumns = s.getLastColumn();
  var targetSheet = ss.getSheetByName("Completed Tickets");
  targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 1, numColumns).setValues(s.getRange(row, 1, 1, numColumns).getValues());
  s.deleteRow(row);
}
15
задан Frosty840 21 April 2009 в 12:37
поделиться

2 ответа

Невозможно использовать ManagedThreadId в этом контексте. Это полностью управляемая концепция, которая не имеет реального представительства в родном мире. Следовательно, это не имеет никакого смысла для API, которому вы передаете его.

Причина, по которой существует ManagedThreadId, заключается в том, что необязательно существует соответствие 1-1 между собственным и управляемым потоком. CLR может использовать несколько собственных потоков для запуска одного управляемого потока, если собственный поток совместим с тем, который он заменяет. Это не может быть, например, в другой квартире COM.

В некотором смысле вы немного застряли здесь. AFAIK, нет никакой возможности на 100% гарантировать, что у вас будет тот же собственный поток для данного управляемого потока. Вы можете достичь очень высокого уровня гарантии, хотя, если вы, например, запускаете приложение WinForms или WPF и вызов нативного кода происходит в потоке пользовательского интерфейса. Причина в том, что обе эти инфраструктуры пользовательского интерфейса живут в квартирах STA, что делает очень трудным (если вообще возможно) переключение CLR из-под вас.

Короткая версия: Если вы находитесь в приложении WinForms или WPF и запустив это в потоке пользовательского интерфейса, вы можете предположить разумный уровень стабильности для этого идентификатора.

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

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

14
ответ дан 1 December 2019 в 03:05
поделиться

Для будущих читателей: Существуют также функции System.Threading.Thread.BeginThreadAffinity() / EndThreadAffinity(), которые якобы останавливают VM от переключения между различными физическими потоками. Я не верю, что они гарантируют стабильность, но я думаю, что вероятность стабильности выше.

3
ответ дан 1 December 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: