есть две вещи ... 1. Окна формы используют очередь, а не многопоточность, и она построена на событии STA (Single Thread Architect), хотя, когда мы смотрим на нее, она выглядит как MTA ... Итак, во-первых, если вызапустить в отдельном потоке, вы должны синхронизироваться с очередью Windows ... это иногда даже вызывает ошибки, если вы не делаете этого, когда вы работаете с элементами управления
, вызывая: this (which this mean this form instance)
this.Invoke(new Action(delegate(){ /* your Synchronized code comes here */}))
or (Action)delegate() {} as i saw in internet
Во-вторых, поместите вычисления в фоновый режим, выполните что-то вроде двойной буферизации ... означает, что вы не применяете и не синхронизируете свою форму, пока выполняете вычисления или чертежи ...
, как только вы закончите, вы просто применяете, они нарисованы сзади ....
Таким образом, ваш конечный код будет выглядеть так:
{ //New thread function
// Calculates
// Draw arts
// Synchronize
this.Invoke((Action)delegate() {
//Perform Synchronizing Code
// Apply your drawn image and graphics to your image viewer, aka picture box
}
// End of thread, or if you need something extra to be performed afterward...
}
Но если у вас нет доступа к этому компонентному блоку.... попробуйте посмотреть, как выглядит производительность, если вы передадите ей параметры в фоновом режиме, а затем добавите ее в форму?если процесс инициализации компонента ниже, чем изменение графики во время работы, если это выглядело хорошо, продолжайте в том же духе, вызывайте при рисовании в каком-либо компоненте каждое изменение, заставляющее форму перерисовываться, и это приводит к снижению производительности.