【发布时间】:2014-02-24 13:06:39
【问题描述】:
我需要在另一个线程上使用控件。我知道我需要调用它们,但不知道如何调用。这是我的代码:
Thread threadWriteLog = new Thread(new ThreadStart(this.WriteLog));
threadWriteLog.Start();
private void WriteLog()
{
date = DateTime.Now;
using (StreamWriter swLog = new StreamWriter(String.Format("{0}\\RoutesLogs\\{1}.log", Settings.Instance.Paths.SDCard, textName), true)) //zapisovanie logu
{
if (btnStartPause.Text == "Start Recording")
swLog.WriteLine(String.Format("Route start: {0}", date.ToString(format)));
else if (btnStartPause.Text == "Pause Recording")
swLog.WriteLine(String.Format("Route pause: {0}", date.ToString(format)));
else if (btnStartPause.Text == "Resume Recording")
swLog.WriteLine(String.Format("Route resume: {0}", date.ToString(format)));
}
}
你能给我写一个解决代码吗?
【问题讨论】:
-
您也可以使用枚举
RecordingStatus作为表单中的类变量,而不是尝试访问按钮的文本。并且作为一个副作用,可以消除拼写错误的机会。 -
C.Evenhuis 的建议也会否定调用主线程的使用。
-
我将 btn.text 保存到主线程上的字符串中,现在我在另一个线程上比较该字符串。工作正常,但我想看看如何调用控件,这对我很有用。谢谢
-
这完全是个坏主意。本地化您的应用程序或简单地更改设计器中的 Text 属性,此代码将不再起作用。但实际上不需要调用,Text 属性 getter 已经自动调用了。
标签: c# multithreading controls compact-framework invoke