Как я могу определить, вызывается ли мой метод другим потоком, чем основной интерфейс? - PullRequest
1 голос
/ 13 мая 2010

Я передаю свой класс доступа к данным (DAL) в другой класс, чтобы он мог использовать эти методы доступа к данным для хранения данных в моей базе данных sqlite.

Это типобезопасно, поскольку каждый метод, который обращается к базе данных, создает свой собственный объект подключения, поэтому вызовы объекта подключения всегда поступают из того же потока, в котором он был создан.

Я хотел бы просто использовать одно соединение (или пул объектов соединений) в моем классе DAL, и это будет работать нормально, если все вызовы моего DAL будут поступать из основного потока пользовательского интерфейса.

Есть ли способ для моего класса DAL использовать объект соединения (или их пул) при вызове из основного потока, но затем использовать другой объект соединения, если вызывается из фонового потока?

Ответы [ 2 ]

5 голосов
/ 13 мая 2010

Вы можете вызвать InvokeRequired для любого типа WinForms Control, чтобы определить, находитесь ли вы в главном потоке или нет. Если InvokeRequired возвращает true, значит, вы не в основном потоке пользовательского интерфейса.

Если вы используете WPF, вы можете вызвать Dispatcher.CheckAccess для свойства DependencyObject.Dispatcher одного из ваших элементов пользовательского интерфейса. Если CheckAccess возвращает true, это основной поток пользовательского интерфейса.

1 голос
/ 13 мая 2010
if (!mainForm.InvokeRequired)
{
    // running on the UI thread
}
else
{
    // running on a different thread
}

(вместо mainForm можно использовать любой элемент управления)

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