スレッドに未解決の問題があります。それは初めてのことです。私は、テキストボックスに書き込むために1つのスレッドを使用する方法を知っていますが、私は仕事をするためにそれらの2つを使用する方法がありません。誰でも私は同じテキストボックスに書き込むために2つのスレッドを使用できるようにするために何をしなければならないのかを知っているが、同じ時間ではない。ありがとうございました。2つのスレッドを使用してテキストボックスに書き込む
答えて
ここでは、複数のテキストボックスに乱数を書き込むために2つのスレッドを使用する例を示します。 BrandonとJon Bが指摘するように、Invoke()を使用してGUIスレッドへの呼び出しをシリアル化する必要があります。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Random m_random = new Random((int)DateTime.Now.Ticks);
ManualResetEvent m_stopThreadsEvent = new ManualResetEvent(false);
private void buttonStart_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(new ThreadStart(ThreadOne));
Thread t2 = new Thread(new ThreadStart(ThreadTwo));
t1.Start();
t2.Start();
}
private void ThreadOne()
{
for(;;)
{
int n = m_random.Next(1000);
AppendText(String.Format("One: {0}\r\n", n));
if(m_stopThreadsEvent.WaitOne(n))
{
break;
}
}
}
private void ThreadTwo()
{
for(;;)
{
int n = m_random.Next(1000);
AppendText(String.Format("Two: {0}\r\n", n));
if(m_stopThreadsEvent.WaitOne(n))
{
break;
}
}
}
delegate void AppendTextDelegate(string text);
private void AppendText(string text)
{
if(textBoxLog.InvokeRequired)
{
textBoxLog.Invoke(new AppendTextDelegate(this.AppendText), new object[] { text });
}
else
{
textBoxLog.Text = textBoxLog.Text += text;
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
m_stopThreadsEvent.Set();
}
}
それは私に役立った、ありがとう:) –
最も安全な方法は、1つのスレッドのみがテキストボックス(または任意のGUIオブジェクト)で作業できることです。テキストボックスでアクションを実行する必要がある他のスレッドには、テキストボックス。
あなたの質問はスレッド間の通信方法になります。これは言語/ OS固有のものになるため、より多くの情報を提供する必要があります。
あなたが求めているかどうかは分かりません。私はこのようなsthを行う必要があります:例えば、私はスレッドを開始した後、テキストボックスのテキストの長さを確認し、テキストボックスが無料であるかどうかを確認するために5秒後にそれを書いて、2スレッドと1テキストボックスを書く1つのスレッドがtextBoxを使用している間、他のものが最初のものとして実行し、textBoxがフリーであるかどうかを確認してください。そうでなければ、ランダムな時間スリープしてから再度チェックしてください。 – Allek
このMSDN Articleは、Windowsフォームコントロールにスレッドセーフな呼び出しを行う方法を説明しています。
GUIコンポーネントは、メインスレッドからのみアクセスできます。別のスレッドからテキストボックスに書き込むには、BeginInvoke()を使用する必要があります。
もう1つのオプションは、スレッドコールバックメソッドを使用することです。これはメインスレッド上に存在するメソッドですが、新しいスレッドを作成するときは、このメソッドへのハンドル/参照を渡します。これにより、2番目のスレッドがメインスレッドのメソッドを呼び出すことができ、テキストボックスを更新/チェックする機能がそこにあります。
スレッド間で代理人を渡して調べます。
オプションは、キューオブジェクトにメッセージをプッシュし、このキューからメッセージを読み込んでテキストボックスに書き込むためにWindowsフォーム上のタイマーを使用します。
niceとthreadsagesをすべて作成するには、Queueオブジェクトを読み書きするときにロックすることができます。例えば
:
private Queue<string> messages = new Queue<string>();
/// <summary>
/// Add Message To The Queue
/// </summary>
/// <param name="text"></param>
public void NewMessage(string text)
{
lock (messages)
{
messages.Enqueue(text);
}
}
private void tmr_Tick(object sender, EventArgs e)
{
if (messages.Count == 0) return;
lock (messages)
{
this.textBox.Text += Environment.NewLine + messages;
}
}
- 1. JavaScriptを使用してテキストボックスに文字列を書き込む
- 2. 20スレッドを使用してファイルに書き込む
- 3. Pythonを使用して2つのファイルからExcelにデータを書き込む
- 4. domdocumentを使用して2つのXML要素の内部に書き込む
- 5. テキストボックスを別のフォームに書き込む
- 6. log4netを使用して2つの異なるファイルに書き込む
- 7. c#テキストボックスにメッセージを書き込む
- 8. 、その後、テキストボックスに書き込む
- 9. スイッチケースを使用して2つのハンドラを書き込む方法
- 10. スレッドとプロセスを使用して同じファイルに同時に書き込む
- 11. アニメーション中にテキストボックスに書き込む
- 12. javascriptを使用して、あるテキストボックスから他のテキストボックスにテキストを書き込む方法は?
- 13. テキストボックスの2つのレイヤーバインディングが書き込まれていない
- 14. Java mvcからスレッドに書き込む
- 15. 書き込みを使用してファイルディスクリプタに整数を書き込む?
- 16. 1つのテキストボックスに書き込むときに、同じテキストをすべてのテキストボックスに入力する
- 17. 角型2を使用して2つのフォーム検証を単一のtsファイルに書き込む方法は?
- 18. デリミタを使用してCSVファイルに2次元配列を書き込む
- 19. to_excel()を使用してExcelにデータフレームのリストを書き込む
- 20. SFTPを使用してmuleのファイルにペイロードを書き込む
- 21. 2つのキーを含むパスを書き込む方法は?
- 22. JSのみを使用してテキストファイルに書き込む
- 23. JedisClusterを使用してRedis Clusterのパーティションに書き込む
- 24. ソケットを使用してネットワークデバイスに書き込む際の問題
- 25. VB(多くの行)を使用してExcelに書き込む
- 26. webservcesを使用して他のSharepointサイトに書き込む
- 27. SSISを使用してSSAS以外のキューブシステムに書き込む
- 28. Pythonを使用して特定のcsv列に書き込む
- 29. ローカルでangular2のタイプスクリプトを使用してローカルファイルに書き込む
- 30. OpenXMLを使用して既存のExcelファイルに書き込む
どの言語? – Aziz
私はそれを行うためにC#を使用して – Allek