Screen.FromControl()
, Screen.FromHandle()
и пр. Или можно использовать свойство AllScreens, хранящее все мониторы системы. <ListBox ItemsSource="{Binding DevList}" SelectedItem="{Binding SelectedElement}" />
<GroupBox DataContext="{Binding SelectedElement}">
</GroupBox>
<GroupBox DataContext="{Binding SelectedElement.Subelement1}">
</GroupBox>
cancellationToken.IsCancellationRequested
. Если в воркере используется цикл, то проверять можно в каждой итерации.var formWait = new FormWait(cancellationToken =>
{
foreach(var item in _items)
{
if (cancellationToken.IsCancellationRequested)
{
return;
}
item.DoWork();
}
});
wait.Stop = delegate ()
{
var source = _tokenSource;
if (source != null)
{
source.Cancel();
source.Dispose();
_tokenSource = null;
}
};
myThread.Start();
В форме:
public Action<CancellationToken> Worker { get; } // добавляем ссылку на токен останова
public Action Stop { get; set; }
private CancellationTokenSource _tokenSource;
public FormWait(Action<CancellationToken> worker)
{
InitializeComponent();
if (worker == null)
throw new ArgumentNullException();
Worker = worker;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
_tokenSource?.Dispose();
_tokenSource = new CancellationTokenSource();
var cancellationToken = = _tokenSource.Token;
Task.Factory.StartNew(() => Worker(cancellationToken ))
.ContinueWith(t => { this.Close(); }, TaskScheduler.FromCurrentSynchronizationContext());
}
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine("Stop");
Stop();
}
public Func<CancellationToken, bool> Worker { get; }
Task.Factory.StartNew<bool>(() => Worker(cancellationToken))
.ContinueWith(t => { if (t.Result) this.Close(); }, TaskScheduler.FromCurrentSynchronizationContext());
namespace DelegateDemo
{
public delegate string DemoDel(string s);
class Program
{
static void Main(string[] args)
{
ParamMethod(DelLink); // передача ссылки на метод DelLink в ParamMethod
ParamMethod(s => "(" + s + ")"); // передача анонимной функции в ParamMethod
Console.ReadKey();
}
static bool ParamMethod(DemoDel d)
{
if(d("что угодно") == "2")
{
Console.WriteLine("делегат вернул 2");
}
if(d("5") == "(5)" && d("100500") == "(100500)")
{
Console.WriteLine("делегат обернул число в скобки");
}
}
static string DelLink(string s)
{
return "2";
}
}
}
var testFiles = Directory.EnumerateFiles(solutionDirectory + @"\samples");
var sortedTestFiles1 = testFiles.OrderBy(x => x, new NaturalComparer());
// или
var sortedTestFiles2 = testFiles.ToList();
sortedTestFiles2.Sort(new NaturalComparer());
/// <summary>
/// Натуральное сравнение строк
/// </summary>
public class NaturalComparer : IComparer<string>
{
/// <summary>
/// Вызов WinApi-функции для натурального сравнения строк
/// </summary>
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
/// <summary>
/// Натуральное сравнение строк
/// </summary>
/// <param name="x">Первая строка</param>
/// <param name="y">Вторая строка</param>
/// <returns>Сравнивает две строки, возвращая -1, 0 или 1</returns>
public static int Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
}
/// <summary>
/// Натуральное сравнение строк
/// </summary>
/// <param name="x">Первая строка</param>
/// <param name="y">Вторая строка</param>
/// <returns>Сравнивает две строки, возвращая -1, 0 или 1</returns>
int IComparer<string>.Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
}
}
public readonly List<Meetings> MeetingsList = new List<Meetings>();
Meetings meet
, потому что переменная с именем meet уже есть. Если ошибка здесь не возникает, то, скорее всего, в какой-то из двух имён вместо английской "e" стоит русская "е". return (from e in db.Position
.Include(p => p.Operations.Select(o => o.Transition.Select(t => t.RiggingTransition)))
.Include(p => p.Operations.Select(o => o.MaterialOperation))
where ...
select e).ToList();
<Window x:Class="TestApp.MainWindow"
xmlns:testApp="clr-namespace:TestApp"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type testApp:TestInt}">
<TextBlock Text="{Binding Value}" Background="Red"/>
</DataTemplate>
<DataTemplate DataType="{x:Type testApp:TestStr}">
<TextBlock Text="{Binding Value}" Background="Yellow"/>
</DataTemplate>
</Window.Resources>
<StackPanel>
<ContentControl Content="{Binding Test1}"/>
<ContentControl Content="{Binding Test2}"/>
<ListBox ItemsSource="{Binding TestList}"/>
</StackPanel>
</Window>
public class TestInt
{
public int Value { get; set; }
}
public class TestStr
{
public string Value { get; set; }
}
public partial class MainWindow : Window
{
public TestInt Test1 { get; set; }
public TestStr Test2 { get; set; }
public List<object> TestList { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Test1 = new TestInt { Value = 123 };
Test2 = new TestStr { Value = "asd" };
TestList = new List<object> { Test1, Test2 };
}