2017-02-16 2 views
-1

У меня есть свойство, которое может быть изменено с помощью метода Invoke() (из темы) и другого без invoke() в том же классе.Просто запрос, о Invoke() в основной теме

Что произойдет, если они будут вызваны в один и тот же момент?

Это возможно? Так как может повлиять на условие в каком-то методе.

Например:

public class Test{ 
    public bool testBool { get; set; } 

    public void MethodWIthInvoke(){ 
     this.Invoke(new Action(() => 
     { 
      if (testBool) 
      { 
       testBool = false; 
      } 
     })); 
    } 

    public void Method(){ 
     if (testBool) 
     { 
      testBool = false; 
     } 
    } 
} 
+0

Это будет хорошо, пока 'Method()' вызывается только из потока пользовательского интерфейса. – itsme86

+0

Да, 'Method()' вызывается только из потока пользовательского интерфейса. Что произойдет, если они будут запускаться одновременно? – Cristian18

+0

@ Cristian18 Они не могут, если они оба бегут из той же нити. Он будет делать то или другое. – Servy

ответ

-1

Я не уверен, почему вы должны сделать код так, во всяком случае, так как оба метода будет вызываться из той же нити, то это будет хорошо. Я хочу предложить еще один способ написать код следующим образом:

public class Test{ 
public bool testBool { get; set; } 

public void Method() 
    { 
     if (this.InvokeRequired) 
     { 
      this.Invoke(new Action(() => 
      { 
       if (testBool) 
       { 
        testBool = false; 
       } 
      })); 
     } 
     else 
     { 
      if (testBool) 
      { 
       testBool = false; 
      } 
     } 
    } 
} 
Смежные вопросы