我正在使用pythonnet制作简单的gui。
import os, sys, ntpath, threading
from subprocess import call
import clr
clr.AddReference("System")
clr.AddReference("System.Windows.Forms")
import System
import System.Windows.Forms as WinForms
from System.Threading import ApartmentState, Thread, ThreadStart
from System.Windows.Forms import (Application, Form, Button)
from System.Drawing import Point
class demo(WinForms.Form):
def __init__(self):
self.filename = None
self.InitializeComponent()
def InitializeComponent(self):
"""Initialize form components."""
self.components = System.ComponentModel.Container()
self.btn = Button()
self.btn.Parent = self
self.btn.Click += self.process
self.CenterToScreen()
self.cmd = "Running forever command"
def Dispose(self):
self.components.Dispose()
WinForms.Form.Dispose(self)
def thread_process(self):
call(self.cmd, shell=True)
pass
def process(self, sender, args):
self.thread = threading.Thread(target=self.thread_process, daemon=True)
self.thread.start()
def OnClickFileExit(self, sender, args):
self.Close()
WinForms.Application.Run(demo())
它工作正常但是当我点击退出按钮时,显然应用程序没有停止。如何在用户关闭应用程序时正确停止正在运行的线程?
答案 0 :(得分:2)
如果符合您的需要,您可能需要尝试将process
主题设置为deamon
主题:
self.thread = threading.Thread(target=self.thread_process, daemon=True)
以下是关于deamon主题的一些信息:
线程可以标记为“守护程序线程”。这个的意义 flag是只有守护进程线程时整个Python程序退出 离开了。初始值继承自创建线程。该 可以通过守护进程属性设置标志。
来源:https://docs.python.org/2/library/threading.html#thread-objects