就是所謂的鳥蛋教學
但至少可以解決問題啦(抓頭
dataGridView當掉的圖如下
多麼好笑的圖
我遇到的掉當原因為
我在winForm裡是使用Thread
當Thread抓取到某個值後需修改dataGridView (addRows)
但是控制dataGridView的其實是winForm的UI Thread
通常這樣寫會出現下列Exception
類型 'System.InvalidOperationException' 的未處理例外狀況發生於 System.Windows.Forms.dll
其他資訊: 跨執行緒作業無效: 存取控制項 'dataGridView1' 時所使用的執行緒與建立控制項的執行緒不同。
如果你說沒有發生 (σ ゚∀ ゚)σ 快來去看看你的Form Load是否多加了一行
Form.CheckForIllegalCrossThreadCalls = false;
雖然加上了會省了很多問題(忽略跨執行緒的問題)
但也讓我抓這個 dataGridView當掉問題抓了很久
因為一點Exception都沒有
就直接叉叉呈現
這時候我們只好踏實點寫了
把它委派(delegate)
先宣告類別變數
// 委派DataGridView使用
private delegate void GridViewAddRows(String str);
後面帶的參數請依需求更改類別 但是一次好像只能丟一個值
接下來寫方法,想對dataGridView addRows時呼叫
大概的意思好像是如果需要委派,就把它委派(this.Invoke(addRows, str))
若已委派,就執行你要它幹嘛就幹嘛(喂
private void InvokeGridViewAddRows(String str)
{
if (this.InvokeRequired)
{
GridViewAddRows addRows = new GridViewAddRows((InvokeGridViewAddRows));
this.Invoke(addRows, str);
}
else
{
// 在這裡寫入原本取到str後要對dataGridView做的事
}
}
總之還是請大家多多Google再寫(冒汗
以上
沒有留言:
張貼留言