在該控件上執行的操作正從錯誤的線程調用。使用 Control.Invoke 或 Control.BeginInvoke 封送到正確的線程才能執行此操作。(以解決)

如果您對這篇小文感興趣的話,或許您在編程中時候碰到過以下類似的異常提示:

1、線程間操作無效: 從不是創建控件“X”的線程訪問它。(X是控件名稱)
2"在該控件上執行的操作正從錯誤的線程調用。使用 Control.Invoke  Control.BeginInvoke 封送到正確的線程才能執行此操作。"

看到這種提示,極有可能是跨線程訪問控件造成的。舉個小例子,

代碼如下:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()

        {
            InitializeComponent();
        }

        public delegate void MyMethod();
  //聲明一個委託,以使其它線程訪問  

        //
按鈕  
        private void button1_Click(object sender, EventArgs e)
        {
            Thread aaa = new Thread(new ThreadStart(OpenDialogOnOtherThread));
            aaa.Start();
        }

        //
其它線程打開對話框  
        void OpenDialogOnOtherThread()
        {
            MyMethod OpenDialog = new MyMethod(this.OpenDialog);
            this.Invoke(OpenDialog);
  //在當前線程,調用OpenDialog  
        }

        //
打開對話框  
        void OpenDialog()
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.ShowDialog();
        }
    }
}


 

發佈了48 篇原創文章 · 獲贊 7 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章