我必须使用 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来更新进度条。他们为什么要创建一个线程。我所做的是正确的还是会导致任何问题?
答案 0 :(得分:1)
你的代码很好,虽然你应该真的在堆栈上创建对话框而不是在堆上分配它(特别是没有删除它)并且不清楚为什么你使用wxGenericProgressDialog
而不是{{1 }}
但是使用单独的线程更可取,因为它可以使您的程序GUI保持响应,而在您的示例中,它将一次被阻塞200ms,并且无论多长时间“后端的某些功能”将会占用。如果这对你来说是可以接受的,你可以保持这样,但是使用后台线程通常会带来更好的用户体验 - 即使它需要程序员付出更多努力。