<p dir="ltr">Thanks for your reply. I've found that `disable`-ing canvas of text editor when inserting works too. But with downside that you cant select anything or move the cursor when bulk of text strings are inserted.</p>

<div class="gmail_quote">26 авг. 2014 г. 7:09 пользователь "Eli Barzilay" <<a href="mailto:eli@barzilay.org">eli@barzilay.org</a>> написал:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
You generally can't do that kind of stuff from a different thread...<br>
After fighting with this for a while I eventually realized that it's<br>
not too hard to avoid the extra thread: instead of doing the work<br>
there, just stick it in a closure that is handed to `queue-callback'.<br>
(This is based on lessons learned the hard way in an application that<br>
does a lot of this kind of stuff...)<br>
<br>
<br>
On Sun, Aug 24, 2014 at 5:00 PM, Dmitry Cherkassov<br>
<<a href="mailto:dcherkassov@gmail.com">dcherkassov@gmail.com</a>> wrote:<br>
> Hi. I am asyncrhonously insert text strings to editor% (from another thread)<br>
><br>
> The problem is that i sometimes get this exception from object of editor% class:<br>
><br>
> sequence-contract-violation: negative: method insert cannot be called,<br>
> except in states (unlocked)<br>
><br>
> I've tried to loop while editor is locked calling these functions<br>
> <a href="http://docs.racket-lang.org/gui/editor___.html#%28meth._%28%28%28lib._mred%2Fmain..rkt%29._editor~3c~25~3e%29._locked-for-flow~3f%29%29" target="_blank">http://docs.racket-lang.org/gui/editor___.html#%28meth._%28%28%28lib._mred%2Fmain..rkt%29._editor~3c~25~3e%29._locked-for-flow~3f%29%29</a><br>

><br>
> But it seems they do not work for me (do not return if editor is<br>
> locked) and still that exception in caused.<br>
><br>
> I've fallen back to ugly loop then.<br>
><br>
> (define retry (call/cc (lambda (k) k)))<br>
><br>
> (with-handlers ([exn:fail?<br>
>                  (lambda (ex)<br>
>                    (sleep 1)<br>
>                    (retry retry))])<br>
>                (send editor insert message))<br>
><br>
><br>
> Is there a better way?<br>
><br>
> P.S Full source code for that stuff is available there:<br>
> -------------------------------------------------------------------------------<br>
><br>
> <a href="https://github.com/lehitoskin/blight/blob/master/msg-history.rkt#L143" target="_blank">https://github.com/lehitoskin/blight/blob/master/msg-history.rkt#L143</a><br>
><br>
> `add-recv-message' is called by `on-friend-message':<br>
> <a href="https://github.com/lehitoskin/blight/blob/master/blight.rkt#L956" target="_blank">https://github.com/lehitoskin/blight/blob/master/blight.rkt#L956</a><br>
><br>
> which is called back by `callback-friend-message' C function:<br>
> <a href="https://github.com/lehitoskin/libtoxcore-racket/blob/master/functions.rkt#L489" target="_blank">https://github.com/lehitoskin/libtoxcore-racket/blob/master/functions.rkt#L489</a><br>
> ----------------------------------------------------------------------------------<br>
><br>
> Thank you.<br>
><br>
> --<br>
> With best regards,<br>
> Dmitry<br>
> ____________________<br>
>   Racket Users list:<br>
>   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
<br>
<br>
--<br>
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:<br>
                    <a href="http://barzilay.org/" target="_blank">http://barzilay.org/</a>                   Maze is Life!<br>
</blockquote></div>