2016-02-18 5 views
-1

Я пишу элемент управления Winforms, который обертывает библиотеку JS и расширяет управление веб-браузером.Должен ли я вызвать внутри элемента управления?

Я звоню функции JavaScript следующим образом:

/// <summary> 
    /// Asks the browser to run a JavaScript function 
    /// </summary> 
    /// <param name="name">The name of the JS function. WARNING usually browser JS engines make the first letter of the function lowercase. If you pass 'Foo', the browser will look for 'foo'</param> 
    /// <param name="args">The arguments to pass to the method; Should probably be JSON/JSON string.</param> 
    /// <returns>The object that the JS function returned</returns> 
    private object MyInvokeScript(string name, params object[] args) 
    { 
     //If we're not on the main thread (the one that owns the control), invoke yourself, in the correct thread. 
     if (InvokeRequired) 
      return this.Invoke(new ScriptInvokationHandler(MyInvokeScript), new Object[] { name, args }); 
     else //else, just call the script 
      return this.Document.InvokeScript(name, args); 
    } 

Этот метод используется для вызова всех мои публично доступных методов, и вызывает функцию JS на основе параметра name.

Должен ли я делать это, или я должен ожидать, что пользователь моих методов сделает invokation в соответствующем потоке?

+0

Как вы думаете, что вы должны делать? –

+0

Я не должен проверять 'Control.InvokeRequired' и сразу перейти к оператору' else'. –

ответ

1

Если этот метод находится внутри элемента управления, его всегда нужно вызывать в потоке пользовательского интерфейса. Если пользователь хочет называть его каким-либо другим потоком, его проблема заключается в его вызове, как и каждый элемент управления WinForms.