のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

コントロール 'Progress' がアクセスされました。

System.InvalidOperationException が発生しました
  HResult=0x80131509
  Message=有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'Progress' がアクセスされました。
  Source=<例外のソースを評価できません>
  スタック トレース:
   場所 System.Windows.Forms.Control.get_Handle()
   場所 System.Windows.Forms.Control.GetSafeHandle(IWin32Window window)
   場所 System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)
   場所 System.Windows.Forms.MessageBox.Show(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon)
   場所 FontVal.Progress.OnException(Exception e) (C:\Users\m_fujii\Documents\GitHub\Font-Validator\FontVal\Progress.cs):行 391
   場所 OTFontFileVal.Driver.RunValidation(Validator v, String[] fontList) (C:\Users\m_fujii\Documents\GitHub\Font-Validator\OTFontFileVal\ValDriver.cs):行 487
   場所 FontVal.Progress.Worker() (C:\Users\m_fujii\Documents\GitHub\Font-Validator\FontVal\Progress.cs):行 158
   場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   場所 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   場所 System.Threading.ThreadHelper.ThreadStart()
        // method that will be called when the worker thread is started
        public void Worker()
        {
            m_bValidationInProgress = true;

            OTFontFileVal.Driver driver = new OTFontFileVal.Driver( this );
            driver.RunValidation( m_Validator, m_sFiles );
            m_bValidationInProgress = false;

            // after all work is done, enable the UI and close this dialog
            m_formParent.EnableUI(true);
            //JJF Close();
            CloseOurForm();
        }
        //Validates a list of font files...meant to be used by the Font Validator UI and the command line
        public int RunValidation( Validator v, string [] fontList )
        {
            int i;
            int ret = 0;
            // setup notification for validation events
            v.SetOnValidateEvent(new
                                 Validator.OnValidateEvent(OnValidateEvent));
            // enable us to receive validation info messages
            DIAction vid = new DIAction(ValidatorCallback);
            v.SetValInfoDelegate(vid);

            try
            {
                for (i = 0; i < fontList.Length; i++)
                {
                    // check to see if the user canceled validation
                    if (v.CancelFlag)
                    {
                        m_callbacks.OnCancel();
                        return ret;
                    }

                    ret |= ValidateFont(v, fontList[i], null, i, fontList.Length);
                }
                m_callbacks.OnReportsReady();
            }
            catch (Exception e)
            {
                m_callbacks.OnException(e);
                return 1;
            }

            return ret;

        }
        public void OnException( Exception e )
        {
            MessageBox.Show( this, e.Message, "Error", 
                             System.Windows.Forms.MessageBoxButtons.OK, 
                             System.Windows.Forms.MessageBoxIcon.Error);
            DeleteTemporaryFiles( m_reportFiles );
        }