我有一個帶有菜單條,狀態條和主拆分容器(其本身包含其他拆分容器,樹視圖,選項卡控件等)的窗體。偶爾(相當頻繁,實際上),應用程序將停止在主窗體中調整控件的大小(通常在後臺線程操作期間或之後檢索數據)。該控件本身仍然聲稱它的DockStyle是Fill,但控件不會調整窗體大小。我找不到任何有關可能導致此問題的信息,有沒有人遇到類似這樣的事情?C#窗體 - 在線程操作期間控制丟失碼頭狀態
1
A
回答
0
那麼,這是愚蠢的。
原來我有一個流氓SuspendLayout()調用沒有相應的ResumeLayout()調用。這種行爲不是我所期望的。每天學些新東西!感謝您的期待!
0
確保您從正確的線程處操作UI至關重要。我建議使用下面的擴展methdds
public delegate void EmptyHandler();
public delegate void ParamHandler(params object[] args);
public static void SafeCall(this Control control,
ParamHandler method, params object[] args)
{
if (control.InvokeRequired)
{
control.Invoke(method, args);
}
else
{
method(args);
}
}
public static void SafeCall(this Control control, EmptyHandler method)
{
if (control.InvokeRequired)
{
control.Invoke(method);
}
else
{
method();
}
}
,那麼你可以從不正確的線程中調用適當的方法是這樣
{ ... background thread
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.SafeCall(SetImage, e.Result);
}
}
這就要求用正確的線程方法SetImage(Bitmap bitmap)
。
相關問題
- 1. C#窗體窗體自定義控件跨線程操作
- 2. C# - 跨線程操作 - 在線程創建控制,添加到主窗體
- 3. 用戶控制丟失狀態
- 4. C#Windows窗體控件丟失邊框?
- 5. 跨線程操作控制
- 6. 動態添加ASP.NET Web窗體控件在頁面刷新時丟失狀態
- 7. 獲得在C線程狀態++ /窗口
- 8. 完成狀態窗體C#
- 9. C#使用另一個線程控制窗體,也防止複製窗體
- 10. Cloudfront緩存控制標頭丟失
- 11. watir在幀控制中丟失時間
- 12. 保存/加載在C#窗體窗體內製作的控件
- 13. 使用Windows窗體控制操作系統鼠標事件 - C#
- 14. 如何操作來自Rails控制器操作的響應狀態代碼
- 15. 用戶控制的定製屬性丟失狀態時用戶控制重建
- 16. 線程調用窗體窗體控件
- 17. 在窗體上動態繪製箭頭
- 18. 讀取()操作期間的線程
- 19. Form_AfterUpdate在SubForm.Recordset更改期間丟失
- 20. WPF剪貼板操作期間的數據丟失
- 21. 控制器在動作中丟失
- 22. 會話狀態丟失值
- 23. 窗口之間的C#數據丟失
- 24. Web窗體響應狀態代碼在控制器中始終爲200 in ajax
- 25. 網絡狀態丟失
- 26. 丟失會話狀態
- 27. WIndows:子進程製作新的控制檯窗口,丟失stdin/out
- 28. ReleaseMutex在單線程的C#Windows失敗窗體應用程序
- 29. 調用webservice的線程 - 我如何控制線程狀態?
- 30. 如何不繪製丟失期間
您的後臺線程是否可以訪問您的任何UI控件?你正確使用Invoke嗎? – Bob 2010-08-26 20:24:37
以前從未聽說過那個。我們需要repro代碼。 – 2010-08-26 20:34:24
我正在測試UI控件上的InvokeRequired,所以這不應該是一個問題。我會嘗試做一個可重複的測試用例。 – genki 2010-08-26 21:05:07