ThreadSafe CaretIndex- WinForm
I have a multiline Textbox that uses threadsafe
method to call it.
After every new text, the caret ( cursor ) goes to first line position and for multiline texts. I can't read the lasts lines.
I try to use:
textBox.CaretIndex = _textBox.Text.Length;
but it is not for threadsafe
.
This is my code:
void test()
{
Thread demoThread =
new Thread(new ThreadStart(this.ThreadProcSafe));
demoThread.Start();
}
private void ThreadProcSafe()
{
ThreadHelperClass.SetText(this, textBox2, "text: ");
}
public static class ThreadHelperClass{
delegate void SetTextCallback(Form f, Control ctrl, string text);
/// <summary>
/// Set text property of various controls
/// </summary>
/// <param name="form">The calling form</param>
/// <param name="ctrl"></param>
/// <param name="text"></param>
public static void SetText(Form form, Control ctrl, string text){
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (ctrl.InvokeRequired){
SetTextCallback d = new SetTextCallback(SetText);
form.Invoke(d, new object { form, ctrl, text });
} else {
ctrl.Text += text;
ctrl.Text += Environment.NewLine;
}
}
}
ThreadHelperClass.SetText(this, richTextBox1, "output>>" + e.Data);
I want to go at end of the Textbox ( for see the last lines text ) without clicking or moving the mouse. After a new text, caret go to end of the line.
i want to use Setting cursor at the end of any text of a textbox at ThreadHelperClass but it gives me error
want to use
txtBox.Focus();
txtBox.SelectionStart = txtBox.Text.Length;
OR
txtBox.Focus();
txtBox.CaretIndex = txtBox.Text.Length;
OR
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
this is the error that I get when i using above codes in ThreadHelperClass
Severity Code Description Project File Line Suppression State
Error CS0120 An object reference is required for the non-static field, method, or property 'Form1.textBox2' Download C:UsersworksourcereposDownloadDownloadForm1.cs 108 Active
and when I use it outside of this function my application get crashed for multi thread
c#
add a comment |
I have a multiline Textbox that uses threadsafe
method to call it.
After every new text, the caret ( cursor ) goes to first line position and for multiline texts. I can't read the lasts lines.
I try to use:
textBox.CaretIndex = _textBox.Text.Length;
but it is not for threadsafe
.
This is my code:
void test()
{
Thread demoThread =
new Thread(new ThreadStart(this.ThreadProcSafe));
demoThread.Start();
}
private void ThreadProcSafe()
{
ThreadHelperClass.SetText(this, textBox2, "text: ");
}
public static class ThreadHelperClass{
delegate void SetTextCallback(Form f, Control ctrl, string text);
/// <summary>
/// Set text property of various controls
/// </summary>
/// <param name="form">The calling form</param>
/// <param name="ctrl"></param>
/// <param name="text"></param>
public static void SetText(Form form, Control ctrl, string text){
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (ctrl.InvokeRequired){
SetTextCallback d = new SetTextCallback(SetText);
form.Invoke(d, new object { form, ctrl, text });
} else {
ctrl.Text += text;
ctrl.Text += Environment.NewLine;
}
}
}
ThreadHelperClass.SetText(this, richTextBox1, "output>>" + e.Data);
I want to go at end of the Textbox ( for see the last lines text ) without clicking or moving the mouse. After a new text, caret go to end of the line.
i want to use Setting cursor at the end of any text of a textbox at ThreadHelperClass but it gives me error
want to use
txtBox.Focus();
txtBox.SelectionStart = txtBox.Text.Length;
OR
txtBox.Focus();
txtBox.CaretIndex = txtBox.Text.Length;
OR
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
this is the error that I get when i using above codes in ThreadHelperClass
Severity Code Description Project File Line Suppression State
Error CS0120 An object reference is required for the non-static field, method, or property 'Form1.textBox2' Download C:UsersworksourcereposDownloadDownloadForm1.cs 108 Active
and when I use it outside of this function my application get crashed for multi thread
c#
What is "threadsafe
method"? Do you just mean.Invoke(...)
?
– Enigmativity
Nov 25 '18 at 21:41
I want to use stackoverflow.com/questions/20423211/… inside ThreadHelperClass
– Ragnaros
Nov 25 '18 at 21:50
when using outside of ThreadHelperClass it gives this crash : Cross-thread operation not valid: Control 'rtxtConsole' accessed from a thread other than the thread it was created on.
– Ragnaros
Nov 25 '18 at 22:13
Is this winforms or WPF? You need to provide us with a Minimal, Complete, and Verifiable example.
– Enigmativity
Nov 25 '18 at 22:17
add a comment |
I have a multiline Textbox that uses threadsafe
method to call it.
After every new text, the caret ( cursor ) goes to first line position and for multiline texts. I can't read the lasts lines.
I try to use:
textBox.CaretIndex = _textBox.Text.Length;
but it is not for threadsafe
.
This is my code:
void test()
{
Thread demoThread =
new Thread(new ThreadStart(this.ThreadProcSafe));
demoThread.Start();
}
private void ThreadProcSafe()
{
ThreadHelperClass.SetText(this, textBox2, "text: ");
}
public static class ThreadHelperClass{
delegate void SetTextCallback(Form f, Control ctrl, string text);
/// <summary>
/// Set text property of various controls
/// </summary>
/// <param name="form">The calling form</param>
/// <param name="ctrl"></param>
/// <param name="text"></param>
public static void SetText(Form form, Control ctrl, string text){
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (ctrl.InvokeRequired){
SetTextCallback d = new SetTextCallback(SetText);
form.Invoke(d, new object { form, ctrl, text });
} else {
ctrl.Text += text;
ctrl.Text += Environment.NewLine;
}
}
}
ThreadHelperClass.SetText(this, richTextBox1, "output>>" + e.Data);
I want to go at end of the Textbox ( for see the last lines text ) without clicking or moving the mouse. After a new text, caret go to end of the line.
i want to use Setting cursor at the end of any text of a textbox at ThreadHelperClass but it gives me error
want to use
txtBox.Focus();
txtBox.SelectionStart = txtBox.Text.Length;
OR
txtBox.Focus();
txtBox.CaretIndex = txtBox.Text.Length;
OR
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
this is the error that I get when i using above codes in ThreadHelperClass
Severity Code Description Project File Line Suppression State
Error CS0120 An object reference is required for the non-static field, method, or property 'Form1.textBox2' Download C:UsersworksourcereposDownloadDownloadForm1.cs 108 Active
and when I use it outside of this function my application get crashed for multi thread
c#
I have a multiline Textbox that uses threadsafe
method to call it.
After every new text, the caret ( cursor ) goes to first line position and for multiline texts. I can't read the lasts lines.
I try to use:
textBox.CaretIndex = _textBox.Text.Length;
but it is not for threadsafe
.
This is my code:
void test()
{
Thread demoThread =
new Thread(new ThreadStart(this.ThreadProcSafe));
demoThread.Start();
}
private void ThreadProcSafe()
{
ThreadHelperClass.SetText(this, textBox2, "text: ");
}
public static class ThreadHelperClass{
delegate void SetTextCallback(Form f, Control ctrl, string text);
/// <summary>
/// Set text property of various controls
/// </summary>
/// <param name="form">The calling form</param>
/// <param name="ctrl"></param>
/// <param name="text"></param>
public static void SetText(Form form, Control ctrl, string text){
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (ctrl.InvokeRequired){
SetTextCallback d = new SetTextCallback(SetText);
form.Invoke(d, new object { form, ctrl, text });
} else {
ctrl.Text += text;
ctrl.Text += Environment.NewLine;
}
}
}
ThreadHelperClass.SetText(this, richTextBox1, "output>>" + e.Data);
I want to go at end of the Textbox ( for see the last lines text ) without clicking or moving the mouse. After a new text, caret go to end of the line.
i want to use Setting cursor at the end of any text of a textbox at ThreadHelperClass but it gives me error
want to use
txtBox.Focus();
txtBox.SelectionStart = txtBox.Text.Length;
OR
txtBox.Focus();
txtBox.CaretIndex = txtBox.Text.Length;
OR
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
this is the error that I get when i using above codes in ThreadHelperClass
Severity Code Description Project File Line Suppression State
Error CS0120 An object reference is required for the non-static field, method, or property 'Form1.textBox2' Download C:UsersworksourcereposDownloadDownloadForm1.cs 108 Active
and when I use it outside of this function my application get crashed for multi thread
c#
c#
edited Nov 25 '18 at 22:29
Ragnaros
asked Nov 25 '18 at 20:15
RagnarosRagnaros
186
186
What is "threadsafe
method"? Do you just mean.Invoke(...)
?
– Enigmativity
Nov 25 '18 at 21:41
I want to use stackoverflow.com/questions/20423211/… inside ThreadHelperClass
– Ragnaros
Nov 25 '18 at 21:50
when using outside of ThreadHelperClass it gives this crash : Cross-thread operation not valid: Control 'rtxtConsole' accessed from a thread other than the thread it was created on.
– Ragnaros
Nov 25 '18 at 22:13
Is this winforms or WPF? You need to provide us with a Minimal, Complete, and Verifiable example.
– Enigmativity
Nov 25 '18 at 22:17
add a comment |
What is "threadsafe
method"? Do you just mean.Invoke(...)
?
– Enigmativity
Nov 25 '18 at 21:41
I want to use stackoverflow.com/questions/20423211/… inside ThreadHelperClass
– Ragnaros
Nov 25 '18 at 21:50
when using outside of ThreadHelperClass it gives this crash : Cross-thread operation not valid: Control 'rtxtConsole' accessed from a thread other than the thread it was created on.
– Ragnaros
Nov 25 '18 at 22:13
Is this winforms or WPF? You need to provide us with a Minimal, Complete, and Verifiable example.
– Enigmativity
Nov 25 '18 at 22:17
What is "
threadsafe
method"? Do you just mean .Invoke(...)
?– Enigmativity
Nov 25 '18 at 21:41
What is "
threadsafe
method"? Do you just mean .Invoke(...)
?– Enigmativity
Nov 25 '18 at 21:41
I want to use stackoverflow.com/questions/20423211/… inside ThreadHelperClass
– Ragnaros
Nov 25 '18 at 21:50
I want to use stackoverflow.com/questions/20423211/… inside ThreadHelperClass
– Ragnaros
Nov 25 '18 at 21:50
when using outside of ThreadHelperClass it gives this crash : Cross-thread operation not valid: Control 'rtxtConsole' accessed from a thread other than the thread it was created on.
– Ragnaros
Nov 25 '18 at 22:13
when using outside of ThreadHelperClass it gives this crash : Cross-thread operation not valid: Control 'rtxtConsole' accessed from a thread other than the thread it was created on.
– Ragnaros
Nov 25 '18 at 22:13
Is this winforms or WPF? You need to provide us with a Minimal, Complete, and Verifiable example.
– Enigmativity
Nov 25 '18 at 22:17
Is this winforms or WPF? You need to provide us with a Minimal, Complete, and Verifiable example.
– Enigmativity
Nov 25 '18 at 22:17
add a comment |
2 Answers
2
active
oldest
votes
Can you try calling textBox.CaretIndex = _textBox.Text.Length;
from the GUI thread like this:
Application.Current.Dispatcher.Invoke(
() =>
{
textBox.CaretIndex = _textBox.Text.Length;
});
no not work, anyway thanks
– Ragnaros
Nov 25 '18 at 21:53
Sorry, good luck
– Moffen
Nov 25 '18 at 21:54
add a comment |
Problem Solved By using
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on
delegate void SetTextCallback(string text);
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object { text });
}
else
{
this.textBox1.Text = text;
}
}
in this way I can use textbox and all sub commands like Focus, Select in Cross-thread operation without crash.
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
but in my Question Code there was a
Control ctrl
that didn't have Select, Focus
like to know the answer for old way too
Anyway Thanks
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53471502%2fthreadsafe-caretindex-winform%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Can you try calling textBox.CaretIndex = _textBox.Text.Length;
from the GUI thread like this:
Application.Current.Dispatcher.Invoke(
() =>
{
textBox.CaretIndex = _textBox.Text.Length;
});
no not work, anyway thanks
– Ragnaros
Nov 25 '18 at 21:53
Sorry, good luck
– Moffen
Nov 25 '18 at 21:54
add a comment |
Can you try calling textBox.CaretIndex = _textBox.Text.Length;
from the GUI thread like this:
Application.Current.Dispatcher.Invoke(
() =>
{
textBox.CaretIndex = _textBox.Text.Length;
});
no not work, anyway thanks
– Ragnaros
Nov 25 '18 at 21:53
Sorry, good luck
– Moffen
Nov 25 '18 at 21:54
add a comment |
Can you try calling textBox.CaretIndex = _textBox.Text.Length;
from the GUI thread like this:
Application.Current.Dispatcher.Invoke(
() =>
{
textBox.CaretIndex = _textBox.Text.Length;
});
Can you try calling textBox.CaretIndex = _textBox.Text.Length;
from the GUI thread like this:
Application.Current.Dispatcher.Invoke(
() =>
{
textBox.CaretIndex = _textBox.Text.Length;
});
answered Nov 25 '18 at 20:50
MoffenMoffen
789218
789218
no not work, anyway thanks
– Ragnaros
Nov 25 '18 at 21:53
Sorry, good luck
– Moffen
Nov 25 '18 at 21:54
add a comment |
no not work, anyway thanks
– Ragnaros
Nov 25 '18 at 21:53
Sorry, good luck
– Moffen
Nov 25 '18 at 21:54
no not work, anyway thanks
– Ragnaros
Nov 25 '18 at 21:53
no not work, anyway thanks
– Ragnaros
Nov 25 '18 at 21:53
Sorry, good luck
– Moffen
Nov 25 '18 at 21:54
Sorry, good luck
– Moffen
Nov 25 '18 at 21:54
add a comment |
Problem Solved By using
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on
delegate void SetTextCallback(string text);
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object { text });
}
else
{
this.textBox1.Text = text;
}
}
in this way I can use textbox and all sub commands like Focus, Select in Cross-thread operation without crash.
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
but in my Question Code there was a
Control ctrl
that didn't have Select, Focus
like to know the answer for old way too
Anyway Thanks
add a comment |
Problem Solved By using
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on
delegate void SetTextCallback(string text);
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object { text });
}
else
{
this.textBox1.Text = text;
}
}
in this way I can use textbox and all sub commands like Focus, Select in Cross-thread operation without crash.
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
but in my Question Code there was a
Control ctrl
that didn't have Select, Focus
like to know the answer for old way too
Anyway Thanks
add a comment |
Problem Solved By using
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on
delegate void SetTextCallback(string text);
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object { text });
}
else
{
this.textBox1.Text = text;
}
}
in this way I can use textbox and all sub commands like Focus, Select in Cross-thread operation without crash.
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
but in my Question Code there was a
Control ctrl
that didn't have Select, Focus
like to know the answer for old way too
Anyway Thanks
Problem Solved By using
Cross-thread operation not valid: Control 'textBox1' accessed from a thread other than the thread it was created on
delegate void SetTextCallback(string text);
private void SetText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object { text });
}
else
{
this.textBox1.Text = text;
}
}
in this way I can use textbox and all sub commands like Focus, Select in Cross-thread operation without crash.
txtBox.Focus();
txtBox.Select(txtBox.Text.Length, 0);
but in my Question Code there was a
Control ctrl
that didn't have Select, Focus
like to know the answer for old way too
Anyway Thanks
answered Nov 25 '18 at 22:28
RagnarosRagnaros
186
186
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53471502%2fthreadsafe-caretindex-winform%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What is "
threadsafe
method"? Do you just mean.Invoke(...)
?– Enigmativity
Nov 25 '18 at 21:41
I want to use stackoverflow.com/questions/20423211/… inside ThreadHelperClass
– Ragnaros
Nov 25 '18 at 21:50
when using outside of ThreadHelperClass it gives this crash : Cross-thread operation not valid: Control 'rtxtConsole' accessed from a thread other than the thread it was created on.
– Ragnaros
Nov 25 '18 at 22:13
Is this winforms or WPF? You need to provide us with a Minimal, Complete, and Verifiable example.
– Enigmativity
Nov 25 '18 at 22:17