Когда я начал смотреть на WPF, я рассматривал его как "Winforms с Векторной графикой" и работал прямо в сторону утеса изучения. Надлежащий способ перейти от WinForms до WPF состоит в том, чтобы принять героическую дозу любого наркотика, можно тронуть то, для упущения всего, что Вы знаете, затем запускаете с нуля.
Серьезно, хотя - это намного более чисто и легче при использовании шаблона, такого как Model-View-ViewModel. Читайте больше в Orbifold, этот поток Google Groups и Channel9
Тогда в какой-то момент, Вы будете иметь прозрение и начнете связывать с данными все. Ваш код - позади станет не намного больше, чем вызов к InitializeComponent ().
Создание подкласса Очередь
, вероятно, является лучшим способом. Примерно так должно работать (непроверено):
def join_with_timeout(self, timeout):
self.all_tasks_done.acquire()
try:
endtime = time() + timeout
while self.unfinished_tasks:
remaining = endtime - time()
if remaining <= 0.0:
raise NotFinished
self.all_tasks_done.wait(remaining)
finally:
self.all_tasks_done.release()
Сначала вы должны убедиться, что все ваши рабочие потоки в очереди завершаются с помощью task_done ()
Чтобы реализовать функцию тайм-аута с Queue
, вы можете обернуть код очереди в поток и добавить тайм-аут для этого потока, используя Thread.join ([timeout])
непроверенный пример, чтобы обозначить, что Я предлагаю
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
def queuefunc():
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.setDaemon(True)
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
t = Thread(target=queuefunc)
t.start()
t.join(100) # timeout applies here
Метод join () предназначен для ожидания выполнения всех задач. Если вам все равно, действительно ли задачи завершены, вы можете периодически опрашивать счетчик незавершенных задач:
stop = time() + timeout
while q.unfinished_tasks and time() < stop:
sleep(1)
Этот цикл будет существовать либо когда задачи будут выполнены, либо когда истечет период тайм-аута.
Раймонд