为什么`onWorkerEvent`用在`wxProgressDialog`中?

时间:2017-12-11 06:02:52

标签: c++ wxwidgets

我必须使用 m_dlgProgress = new wxGenericProgressDialog(wxString("Heading"), wxString("Message"), max, this, wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_SMOOTH); for (int i = 0; i <= max; i++) { cont = m_dlgProgressConfig->Update(i); i += max / 7; wxMilliSleep(200); } callingSomeFunctionFromBackend(); //after this function is executed I am updating dialogue with its maximum value cont = m_dlgProgressConfig->Update(max); 显示进度条。目前我这样做:

public static File[] getFileName(String folderPath) {
    File[] fileEntry;
    File folder = new File(folderPath);
    fileEntry = folder.listFiles(pathname -> pathname.isFile());
    return fileEntry;
}

这是显示进度条的正确方法吗?我见过一些创建线程的代码,并使用OnWorkerEvent来更新进度条。他们为什么要创建一个线程。我所做的是正确的还是会导致任何问题?

1 个答案:

答案 0 :(得分:1)

你的代码很好,虽然你应该真的在堆栈上创建对话框而不是在堆上分配它(特别是没有删除它)并且不清楚为什么你使用wxGenericProgressDialog而不是{{1 }}

但是使用单独的线程更可取,因为它可以使您的程序GUI保持响应,而在您的示例中,它将一次被阻塞200ms,并且无论多长时间“后端的某些功能”将会占用。如果这对你来说是可以接受的,你可以保持这样,但是使用后台线程通常会带来更好的用户体验 - 即使它需要程序员付出更多努力。