XP vs S2003: The object is currently in use elsewhere
От: mrix  
Дата: 01.04.06 07:54
Оценка:
Здравствуйте Алл!
Есть приложение,
работая на Виндовс Сервер 2003 приложение стабильно обламывается с ошибкой
[InvalidOperationException]: The object is currently in use elsewhere.

...дальше идет стектрейс, в котором не упоминается ни одна из библиотек приложения.

Но дело в том, что тот же билд прекрасно работает на той же машине уже на Виндовс ХП.

Есть подозрение, что это из-за потоков, но сейчас просто нету времени чтоб исправить.

Вопрос: каким способом возможно заставить работать проложение на 2003й Винде?
(Вариант с "лечением" потоков не предлагать )

Спасибо.
Re: XP vs S2003: The object is currently in use elsewhere
От: _FRED_ Черногория
Дата: 01.04.06 09:45
Оценка:
Здравствуйте, mrix, Вы писали:

M>Есть приложение,

M>работая на Виндовс Сервер 2003 приложение стабильно обламывается с ошибкой
M>[InvalidOperationException]: The object is currently in use elsewhere.

M>...дальше идет стектрейс, в котором не упоминается ни одна из библиотек приложения.

А показать "стектрейс" здесь очень сложно
Help will always be given at Hogwarts to those who ask for it.
Re[2]: XP vs S2003: The object is currently in use elsewhere
От: mrix  
Дата: 01.04.06 10:24
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>А показать "стектрейс" здесь очень сложно
Не сложно.
[InvalidOperationException]: The object is currently in use elsewhere.
at System.Drawing.Image.get_Width() 
at System.Drawing.Image.get_Size() 
at DevExpress.XtraBars.ViewInfo.BarLinkViewInfo.get_GlyphSize() 
at DevExpress.XtraBars.ViewInfo.BarLinkViewInfo.CalcLinkHorizontalCalptionGlyphWidth(Graphics g, Object sourceObject) 
at DevExpress.XtraBars.ViewInfo.BarLinkViewInfo.CalcLinkHorizontalSize(Graphics g, Object sourceObject) 
at DevExpress.XtraBars.ViewInfo.BarCustomContainerLinkViewInfo.CalcLinkHorizontalSize(Graphics g, Object sourceObject) 
at DevExpress.XtraBars.ViewInfo.BarLinkViewInfo.CalcLinkSize(Graphics g, Object sourceObject) 
at DevExpress.XtraBars.BarItemLink.CalcLinkSize(Graphics g, Object sourceObject) 
at DevExpress.XtraBars.ViewInfo.BarControlViewInfo.CalcLinkSize(BarItemLink link, Graphics g, Object sourceObject) 
at DevExpress.XtraBars.ViewInfo.BarControlViewInfo.PreCalcMultiLineSize(Graphics g, Object sourceObject, Int32 AMaxBarWidth, Int32& ARestWidth) 
at DevExpress.XtraBars.ViewInfo.DockedBarControlViewInfo.PreCalcMultiLineSize(Graphics g, Object sourceObject, Int32 AMaxBarWidth, Int32& ARestWidth) 
at DevExpress.XtraBars.ViewInfo.BarControlViewInfo.PreCalcBarDrawInfo(Graphics g, Object sourceObject, Int32 width) 
at DevExpress.XtraBars.ViewInfo.BarControlViewInfo.CalcBarSize(Graphics g, Object sourceObject, Int32 width, Int32 maxHeight) 
at DevExpress.XtraBars.Controls.CustomControl.CalcSize(Int32 width, Int32 maxHeight) 
at DevExpress.XtraBars.Controls.CustomControl.CalcSize(Int32 width) 
at DevExpress.XtraBars.BarDockControl.CalcBarMaxOffsets(DockRow row, Int32 restWidth) 
at DevExpress.XtraBars.BarDockControl.MakeLayout(DockRow row, Point& lastLocation, Int32 rowIndent, Int32 rowObjectIndent, Int32& totalHeight, Int32& totalShrinkableHeight) 
at DevExpress.XtraBars.BarDockControl.DoLayout() 
at DevExpress.XtraBars.BarDockControl.CheckSize() 
at DevExpress.XtraBars.BarDockControl.BarDockChanged() 
at DevExpress.XtraBars.BarDockControl.EndUpdate() 
at DevExpress.XtraBars.BarManager.EndUpdate() 
at DevExpress.XtraBars.Utils.BarMdiHelper.DoCheckMdi(Form activeForm, Boolean force) 
at DevExpress.XtraBars.BarManager.OnFormMdiChildActivate(Object sender, EventArgs e) 
at System.Windows.Forms.Form.OnMdiChildActivate(EventArgs e) 
at System.Windows.Forms.Form.ActivateMdiChild(Form form) 
at System.Windows.Forms.Form.WmMdiActivate(Message& m) 
at System.Windows.Forms.Form.WndProc(Message& m) 
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m) 
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m) 
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Re[3]: XP vs S2003: The object is currently in use elsewhere
От: _FRED_ Черногория
Дата: 01.04.06 10:59
Оценка:
Здравствуйте, mrix, Вы писали:

M>[InvalidOperationException]: The object is currently in use elsewhere.
M>at System.Drawing.Image.get_Width() 
M>at System.Drawing.Image.get_Size() 
M>at DevExpress.XtraBars.ViewInfo.BarLinkViewInfo.get_GlyphSize() 
M>at DevExpress.XtraBars.ViewInfo.BarLinkViewInfo.CalcLinkHorizontalCalptionGlyphWidth(Graphics g, Object sourceObject) 
M>at DevExpress.XtraBars.ViewInfo.BarLinkViewInfo.CalcLinkHorizontalSize(Graphics g, Object sourceObject) 
M>at DevExpress.XtraBars.ViewInfo.BarCustomContainerLinkViewInfo.CalcLinkHorizontalSize(Graphics g, Object sourceObject) 
M>at DevExpress.XtraBars.ViewInfo.BarLinkViewInfo.CalcLinkSize(Graphics g, Object sourceObject) 
M>at DevExpress.XtraBars.BarItemLink.CalcLinkSize(Graphics g, Object sourceObject) 
M>at DevExpress.XtraBars.ViewInfo.BarControlViewInfo.CalcLinkSize(BarItemLink link, Graphics g, Object sourceObject) 
M>at DevExpress.XtraBars.ViewInfo.BarControlViewInfo.PreCalcMultiLineSize(Graphics g, Object sourceObject, Int32 AMaxBarWidth, Int32& ARestWidth) 
M>at DevExpress.XtraBars.ViewInfo.DockedBarControlViewInfo.PreCalcMultiLineSize(Graphics g, Object sourceObject, Int32 AMaxBarWidth, Int32& ARestWidth) 
M>at DevExpress.XtraBars.ViewInfo.BarControlViewInfo.PreCalcBarDrawInfo(Graphics g, Object sourceObject, Int32 width) 
M>at DevExpress.XtraBars.ViewInfo.BarControlViewInfo.CalcBarSize(Graphics g, Object sourceObject, Int32 width, Int32 maxHeight) 
M>at DevExpress.XtraBars.Controls.CustomControl.CalcSize(Int32 width, Int32 maxHeight) 
M>at DevExpress.XtraBars.Controls.CustomControl.CalcSize(Int32 width) 
M>at DevExpress.XtraBars.BarDockControl.CalcBarMaxOffsets(DockRow row, Int32 restWidth) 
M>at DevExpress.XtraBars.BarDockControl.MakeLayout(DockRow row, Point& lastLocation, Int32 rowIndent, Int32 rowObjectIndent, Int32& totalHeight, Int32& totalShrinkableHeight) 
M>at DevExpress.XtraBars.BarDockControl.DoLayout() 
M>at DevExpress.XtraBars.BarDockControl.CheckSize() 
M>at DevExpress.XtraBars.BarDockControl.BarDockChanged() 
M>at DevExpress.XtraBars.BarDockControl.EndUpdate() 
M>at DevExpress.XtraBars.BarManager.EndUpdate() 
M>at DevExpress.XtraBars.Utils.BarMdiHelper.DoCheckMdi(Form activeForm, Boolean force) 
M>at DevExpress.XtraBars.BarManager.OnFormMdiChildActivate(Object sender, EventArgs e) 
M>at System.Windows.Forms.Form.OnMdiChildActivate(EventArgs e) 
M>at System.Windows.Forms.Form.ActivateMdiChild(Form form) 
M>at System.Windows.Forms.Form.WmMdiActivate(Message& m) 
M>at System.Windows.Forms.Form.WndProc(Message& m) 
M>at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m) 
M>at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m) 
M>at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


Потоки, как видно, здесь не при чём.
Добавь в код главной Mdi-формы:
  public partial class MyMdiForm : Form
  {
    // …

    protected override void OnMdiChildActivate(EventArgs e) {
      try {
        base.OnMdiChildActivate(e);
      } catch(InvalidOperationException) { // FIX: … описание проблемы
      }//try
    }

    // …
  }

А потом сообщи об ошибке разработчикам DevExpress.XtraBars (и стек-трейс привести не забудь ;о)) и жди фикса или предложения по обходу проблемы.
Help will always be given at Hogwarts to those who ask for it.
XP vs S2003: The object is currently in use elsewhere
От: Аноним  
Дата: 01.04.06 09:49
Оценка:
Приложение работает с GDI? Если да, то везде ли используется try/finally (using) для освобождения ресурсов?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: XP vs S2003: The object is currently in use elsewhere
От: Аноним  
Дата: 01.04.06 10:28
Оценка:
Очень не рекомендовал бы использование DevExpress в "другом потоке". Не та это библиотека.

The speed of processors doubles every 18 months" -- Moore's law
"The speed of software halves every 18 months" -- Gates' law .


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: XP vs S2003: The object is currently in use elsewhere
От: AlexZu Россия  
Дата: 01.04.06 15:03
Оценка:
Здравствуйте, mrix, Вы писали:

M>
M>[InvalidOperationException]: The object is currently in use elsewhere.
M>at System.Drawing.Image.get_Width() 
...
M>

В этот момент картинка заблокированна другим потоком (напр. рисуется с пом DrawImage).
imho, решений без "лечений потоков" не существует, в текущей реализации GDI+ нельзя работать с картинкой (даже получать о ней инфу, что канешна странно) в разных потоках без синхронизации, и если на данный момент у вас не работает только на Win2003, то в любой момент ошибка может проявиться и на WinXP.
Re[4]: XP vs S2003: The object is currently in use elsewhere
От: _FRED_ Черногория
Дата: 01.04.06 15:09
Оценка:
Здравствуйте, AlexZu, Вы писали:

M>>[InvalidOperationException]: The object is currently in use elsewhere.
M>>at System.Drawing.Image.get_Width() 
AZ>...

AZ>В этот момент картинка заблокированна другим потоком (напр. рисуется с пом DrawImage).

А вот то, что рисование идёт из разных потококов, уже криминал. Как такое возможно???

AZ>imho, решений без "лечений потоков" не существует,


+1

AZ>в текущей реализации GDI+ нельзя работать с картинкой (даже получать о ней инфу, что канешна странно) в разных потоках без синхронизации,


Это документировано где-то?
Help will always be given at Hogwarts to those who ask for it.
Re[5]: XP vs S2003: The object is currently in use elsewhere
От: AlexZu Россия  
Дата: 01.04.06 16:25
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>А вот то, что рисование идёт из разных потококов, уже криминал. Как такое возможно???

Какой-нить поток вызвает Applicatio.DoEvents, или диалог открыт в другом потоке, а картинка используется одна и та же...

AZ>>в текущей реализации GDI+ нельзя работать с картинкой (даже получать о ней инфу, что канешна странно) в разных потоках без синхронизации,

_FR>Это документировано где-то?
Не видел, определено опытным путем в процессе ловли бага. Воспроизвести достаточно легко: в основном (GUI) потоке рисуйте картинку, а в другом периодически считывайте размеры этой картинки..
Re[6]: XP vs S2003: The object is currently in use elsewhere
От: _FRED_ Черногория
Дата: 01.04.06 16:32
Оценка:
Здравствуйте, AlexZu, Вы писали:

_FR>>А вот то, что рисование идёт из разных потококов, уже криминал. Как такое возможно???

AZ>Какой-нить поток вызвает Applicatio.DoEvents, или диалог открыт в другом потоке, а картинка используется одна и та же...

Ну так и не удивительно, что падает
Help will always be given at Hogwarts to those who ask for it.
Re[4]: XP vs S2003: The object is currently in use elsewhere
От: mrix  
Дата: 03.04.06 09:18
Оценка:
Здравствуйте, _FRED_, Вы писали:

_
_FR>Потоки, как видно, здесь не при чём.
_FR>Добавь в код главной Mdi-формы:
_FR>
_FR>  public partial class MyMdiForm : Form
_FR>  {
_FR>    // …

_FR>    protected override void OnMdiChildActivate(EventArgs e) {
_FR>      try {
_FR>        base.OnMdiChildActivate(e);
_FR>      } catch(InvalidOperationException) { // FIX: … описание проблемы
_FR>      }//try
_FR>    }

_FR>    // …
_FR>  }
_FR>

_FR>А потом сообщи об ошибке разработчикам DevExpress.XtraBars (и стек-трейс привести не забудь ;о)) и жди фикса или предложения по обходу проблемы.

Спасибо, помогло. Разработчикам сообщил(со стрек-трейсом )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.