Вот такая проблема:
Есть класс myconst;
class myconst
{
public StringCollection sc_log = new StringCollection()
}
Есть MainForm которая с помощью BackGroundWorker что то делает и результат пишет в sc_log.
public partial class MainForm : Form
{
public myconst cc = new myconst();
WorkForm wf = new WorkForm();
....
private void button1_Click(object sender, EventArgs e)
{
wf.progressBar1.Value = 0;
wf.progressBar1.Maximum = trackBar1.Value;
backgroundWorker1.RunWorkerAsync(trackBar1.Value);
wf.CButton.Text = "Cancel";
wf.MyParentForm = this;
wf.StartPosition = FormStartPosition.CenterParent;
wf.Enabled = true;
wf.ShowDialog();
}
....
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
int i = 0;
int max = (int)e.Argument;
for (i = 0; i < max; i++)
{
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
}
else
{
this.InvokeIfNeeded(
() => cc.sc_log.Add(string.Format("Working ...{0}",i+1))
);
Thread.Sleep(1000);
backgroundWorker1.ReportProgress(i+1);
}
}
}
...
В тоже время я хочу посмотреть из другой формы в реал тайм что же пишется в sc_log:
public partial class LogForm : Form
{
public MainForm MyParentForm;
public LogForm()
{
InitializeComponent();
}
private void LogForm_Shown(object sender, EventArgs e)
{
LogBox.Items.Clear();
LogBox.Items.Add(MyParentForm.cc.sc_log[0]);
}
}
Но получаю вот такую ошибку:
Error 1 Inconsistent accessibility: field type 'ThreadPoolInvoked.myconst' is less accessible than field 'ThreadPoolInvoked.MainForm.cc' d:\мои документы\visual studio 2010\Projects\ThreadPoolInvoked\ThreadPoolInvoked\MainForm.cs 17 16 ThreadPoolInvoked
Прошу помощи в разборе ошибки.
Может быть подскажете более элегантное решение ? (в файл писать лог пока что не хочу)
Исправил класс myconst на public
public class myconst
{
public StringCollection sc_log = new StringCollection()
}
Ошибка исчезла, однако при попытке посмотреть лог sc_log не доступен из LogForm.
Небольшое уточнение:
LogForm вызывается по клику на Label1с WorkForm , которая вызывается по клику на кнопку "Start" из MainForm.